[
  {
    "path": ".eslintrc.yml",
    "content": "env:\n  browser: true\n  es6: true\nextends:\n  - standard\nglobals:\n  Atomics: readonly\n  SharedArrayBuffer: readonly\nparserOptions:\n  ecmaVersion: 2018\n  sourceType: module\nrules: {}\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "content": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: \"[BUG]\"\nlabels: bug\nassignees: ''\n\n---\n\n<!---\nPlease use the discussion forum (https://github.com/gethinode/hinode/discussions) for questions and troubleshooting. We prefer to use GitHub issues for verified bugs and vetted enhancements.\n\nWhen submitting a bug, please include the exact steps to reproduce the issue. Ideally, use a minimal repo created with the Hinode installation steps for either Hugo or npm (https://gethinode.com/docs/getting-started/introduction/#installation). Add any additional commands and configuration adjustments from there on.\n-->\n\n## Describe the bug\n\nA clear and concise description of what the bug is.\n\n## To reproduce\n\nSteps to reproduce the behavior:\n1. Go to '...'\n2. Click on '....'\n3. Scroll down to '....'\n4. See error\n\nAlternatively, include the commands from your terminal as bash script.\n\n## Expected behavior\n\nIf applicable, a clear and concise description of what you expected to happen.\n\n## Log file\n\nIf applicable, add a copy of Hugo's log messages.\n\n## Screenshots\n\nIf applicable, add screenshots to help explain your problem.\n\n## Host environment\n\nPlease complete the following information where applicable.\n\n - Hinode version: [e.g. v0.11.3]\n - Host OS: [e.g. macOS Ventura 13.3]\n - Node version: [e.g. node v18.15.0]\n - Browser: [e.g. Google Chrome Version 108.0.5359.124 (Official Build) (arm64)]\n\n## Hugo environment\n\nCopy the output of `hugo env` or `npm run env` here.\n\n```bash\n[env output]\n```\n\n## Additional context\n\nAdd any other context about the problem here.\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "content": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: enhancement\nassignees: ''\n\n---\n\n## Problem or enhancement idea\n\nA clear and concise description of what the problem is. E.g. I'm always frustrated when ... Or else, the enhancement idea to further improve Hinode.\n\n## Proposed solution\n\nA clear and concise description of what you want to happen.\n\n## Alternatives\n\nA clear and concise description of any alternative solutions or features you've considered.\n\n## Additional context\n\nAdd any other context or screenshots about the feature request here.\n"
  },
  {
    "path": ".github/codeql/codeql-config.yml",
    "content": "paths:\n  - 'assets/js'\npaths-ignore:\n  - '**/vendor'\n  - '**/critical/languageSelector.js'\n  - '**/critical/color.js'\n  - '**/clipboard.js'\n  - '**/navbar.js'\n  - '**/sharing.js'\n"
  },
  {
    "path": ".github/dependabot.yml",
    "content": "# Please see the documentation for all configuration options:\n# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates\n\nversion: 2\nupdates:\n  - package-ecosystem: \"github-actions\"\n    directory: \"/\"\n    schedule:\n      interval: \"weekly\"\n    open-pull-requests-limit: 10\n  - package-ecosystem: \"npm\"\n    directory: \"/\"\n    schedule:\n      interval: \"daily\"\n    versioning-strategy: increase\n"
  },
  {
    "path": ".github/release.yml",
    "content": "changelog:\n  exclude:\n    labels:\n      - skip-changelog\n  categories:\n    - title: ❗ Breaking Changes\n      labels:\n        - Semver-Major\n        - breaking-change\n    - title: 🚀 Highlights\n      labels:\n        - release-highlight\n    - title: 🎉 New Features\n      labels:\n        - Semver-Minor\n        - enhancement\n    - title: 🐛 Bug Fixes\n      labels:\n        - fix\n        - bugfix\n        - bug\n    - title: 📦 Dependencies\n      labels:\n        - dependencies\n    - title: 🧰 Other Changes\n      labels:\n        - \"*\"\n"
  },
  {
    "path": ".github/workflows/auto-merge.yml",
    "content": "# Source: https://nicolasiensen.github.io/2022-07-23-automating-dependency-updates-with-dependabot-github-auto-merge-and-github-actions/\nname: Dependabot auto-merge\non: pull_request_target\n\npermissions:\n  pull-requests: write\n  contents: write\n\njobs:\n  review-dependabot-pr:\n    runs-on: ubuntu-latest\n    if: ${{ github.event.pull_request.user.login == 'dependabot[bot]' }}\n    steps:\n      - name: Dependabot metadata\n        id: metadata\n        uses: dependabot/fetch-metadata@v3\n        with:\n          github-token: \"${{ secrets.GITHUB_TOKEN }}\"\n\n      - name: Enable auto-merge for Dependabot PRs\n        run: gh pr merge --auto --merge \"$PR_URL\"\n        env:\n          PR_URL: ${{github.event.pull_request.html_url}}\n          GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}\n\n      - name: Approve patch and minor updates\n        if: ${{steps.dependabot-metadata.outputs.update-type == 'version-update:semver-patch' || steps.dependabot-metadata.outputs.update-type == 'version-update:semver-minor'}}\n        run: gh pr review $PR_URL --approve -b \"I'm **approving** this pull request because **it includes a patch or minor update**\"\n        env:\n          PR_URL: ${{github.event.pull_request.html_url}}\n          GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}\n          \n      - name: Comment on major updates of any dependencies\n        if: ${{steps.dependabot-metadata.outputs.update-type == 'version-update:semver-major'}}\n        run: |\n          gh pr comment $PR_URL --body \"I'm **not approving** this PR because **it includes a major update of a dependency**\"\n          gh pr edit $PR_URL --add-label \"requires-manual-qa\"\n        env:\n          PR_URL: ${{github.event.pull_request.html_url}}\n          GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}\n"
  },
  {
    "path": ".github/workflows/codeql.yml",
    "content": "# For most projects, this workflow file will not need changing; you simply need\n# to commit it to your repository.\n#\n# You may wish to alter this file to override the set of languages analyzed,\n# or to provide custom queries or build logic.\n#\n# ******** NOTE ********\n# We have attempted to detect the languages in your repository. Please check\n# the `language` matrix defined below to confirm you have the correct set of\n# supported CodeQL languages.\n#\nname: \"CodeQL Advanced\"\n\non:\n  push:\n    branches: [ \"main\" ]\n  pull_request:\n    branches: [ \"main\" ]\n  schedule:\n    - cron: '44 1 * * 3'\n\njobs:\n  analyze:\n    name: Analyze (${{ matrix.language }})\n    # Runner size impacts CodeQL analysis time. To learn more, please see:\n    #   - https://gh.io/recommended-hardware-resources-for-running-codeql\n    #   - https://gh.io/supported-runners-and-hardware-resources\n    #   - https://gh.io/using-larger-runners (GitHub.com only)\n    # Consider using larger runners or machines with greater resources for possible analysis time improvements.\n    runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }}\n    permissions:\n      # required for all workflows\n      security-events: write\n\n      # required to fetch internal or private CodeQL packs\n      packages: read\n\n      # only required for workflows in private repositories\n      actions: read\n      contents: read\n\n    strategy:\n      fail-fast: false\n      matrix:\n        include:\n        - language: actions\n          build-mode: none\n        - language: javascript-typescript\n          build-mode: none\n        # CodeQL supports the following values keywords for 'language': 'actions', 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'rust', 'swift'\n        # Use `c-cpp` to analyze code written in C, C++ or both\n        # Use 'java-kotlin' to analyze code written in Java, Kotlin or both\n        # Use 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both\n        # To learn more about changing the languages that are analyzed or customizing the build mode for your analysis,\n        # see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning.\n        # If you are analyzing a compiled language, you can modify the 'build-mode' for that language to customize how\n        # your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages\n    steps:\n    - name: Checkout repository\n      uses: actions/checkout@v6\n\n    # Add any setup steps before running the `github/codeql-action/init` action.\n    # This includes steps like installing compilers or runtimes (`actions/setup-node`\n    # or others). This is typically only required for manual builds.\n    # - name: Setup runtime (example)\n    #   uses: actions/setup-example@v1\n\n    # Initializes the CodeQL tools for scanning.\n    - name: Initialize CodeQL\n      uses: github/codeql-action/init@v4\n      with:\n        languages: ${{ matrix.language }}\n        build-mode: ${{ matrix.build-mode }}\n        config-file: ./.github/codeql/codeql-config.yml\n\n        # If you wish to specify custom queries, you can do so here or in a config file.\n        # By default, queries listed here will override any specified in a config file.\n        # Prefix the list here with \"+\" to use these queries and those in the config file.\n\n        # For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs\n        # queries: security-extended,security-and-quality\n\n    # If the analyze step fails for one of the languages you are analyzing with\n    # \"We were unable to automatically build your code\", modify the matrix above\n    # to set the build mode to \"manual\" for that language. Then modify this step\n    # to build your code.\n    # ℹ️ Command-line programs to run using the OS shell.\n    # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun\n    - if: matrix.build-mode == 'manual'\n      shell: bash\n      run: |\n        echo 'If you are using a \"manual\" build mode for one or more of the' \\\n          'languages you are analyzing, replace this with the commands to build' \\\n          'your code, for example:'\n        echo '  make bootstrap'\n        echo '  make release'\n        exit 1\n\n    - name: Perform CodeQL Analysis\n      uses: github/codeql-action/analyze@v4\n      with:\n        category: \"/language:${{matrix.language}}\"\n"
  },
  {
    "path": ".github/workflows/lint-build.yml",
    "content": "name: Lint & build\non:\n  workflow_dispatch:\n  push:\n    tags:\n      - v*\n    branches: [ main, beta ]\n  pull_request:\n    branches: [ main, beta ]\n\nenv:\n  CACHE_KEY: 'hugo-hinode'\n\npermissions:\n  pull-requests: read\n  contents: read\n\njobs:\n  lint:\n    runs-on: ubuntu-latest\n\n    steps:\n    - name: Check out repository\n      uses: actions/checkout@v6\n\n    - name: Set up Node.js\n      uses: actions/setup-node@v6\n      with:\n        node-version: lts/*\n        cache: 'npm'\n        cache-dependency-path: '**/package-lock.json'\n\n    # [24/AUG/23] Adjusted from npm ci to prevent EBADPLATFORM error due to fsevents\n    - name: Install npm\n      run: npm i\n\n    - name: Lint the source files\n      run: npm run lint\n\n  build:\n    needs: lint\n\n    strategy:\n      matrix:\n        os: [macos-latest, windows-latest, ubuntu-latest]\n        # See supported Node.js release schedule at https://nodejs.org/en/about/releases/\n        node-version: [22.x, 24.x]\n        include:\n          - os: ubuntu-latest\n            hugo_cachedir: '/tmp/hugo_cache_runner'\n          - os: macos-latest\n            hugo_cachedir: '/Users/runner/Library/Caches/hugo_cache'\n          - os: windows-latest\n            hugo_cachedir: '~\\AppData\\Local\\hugo_cache'\n\n    runs-on: ${{ matrix.os }}\n\n    env:\n      HUGO_CACHEDIR: ${{ matrix.hugo_cachedir }}\n\n    steps:\n    - name: Check out repository\n      uses: actions/checkout@v6\n\n    - name: Install Go\n      uses: actions/setup-go@v6\n      with:\n        go-version: \"stable\"\n\n    - name: Set up Node.js ${{ matrix.node-version }}\n      uses: actions/setup-node@v6\n      with:\n        node-version: ${{ matrix.node-version }}\n        cache: 'npm'\n        cache-dependency-path: '**/package-lock.json'\n\n    - name: Install Dart Sass\n      env:\n        DART_SASS_VERSION: \"1.98.0\"\n      run: |\n        if [ \"$RUNNER_OS\" == \"Linux\" ]; then\n          curl -fsSL \"https://github.com/sass/dart-sass/releases/download/${DART_SASS_VERSION}/dart-sass-${DART_SASS_VERSION}-linux-x64.tar.gz\" \\\n            | tar -xz -C \"$HOME\"\n          echo \"$HOME/dart-sass\" >> $GITHUB_PATH\n        elif [ \"$RUNNER_OS\" == \"macOS\" ]; then\n          ARCH=$(uname -m)\n          if [ \"$ARCH\" == \"arm64\" ]; then\n            SASS_ARCH=\"macos-arm64\"\n          else\n            SASS_ARCH=\"macos-x64\"\n          fi\n          curl -fsSL \"https://github.com/sass/dart-sass/releases/download/${DART_SASS_VERSION}/dart-sass-${DART_SASS_VERSION}-${SASS_ARCH}.tar.gz\" \\\n            | tar -xz -C \"$HOME\"\n          echo \"$HOME/dart-sass\" >> $GITHUB_PATH\n        elif [ \"$RUNNER_OS\" == \"Windows\" ]; then\n          choco install sass\n        fi\n      shell: bash\n\n    # [24/AUG/23] Adjusted from npm ci for non-macOS to prevent EBADPLATFORM error due to fsevents\n    - name: Perform clean install of npm\n      run: |\n        if [ \"$RUNNER_OS\" == \"macOS\" ]; then\n          npm ci\n        else\n          npm i\n        fi\n      shell: bash\n\n    # On Windows, HUGO_CACHEDIR is initialised from the matrix as '~\\AppData\\Local\\hugo_cache'.\n    # Hugo requires an absolute path, so expand ~ to %LOCALAPPDATA% before using the cache.\n    - name: Expand Hugo cache directory on Windows\n      if: runner.os == 'Windows'\n      run: echo \"HUGO_CACHEDIR=$env:LOCALAPPDATA\\hugo_cache\" >> $env:GITHUB_ENV\n      shell: pwsh\n\n    # Cache Hugo cachedir and resourcedir (configured in config/ci/hugo.toml) for each OS.\n    # Rolling key restores the previous snapshot as a warm start, then saves a fresh one after build.\n    # No additional content-based invalidation is needed; Hugo uses checksums itself.\n    - name: Use Hugo cache\n      uses: actions/cache@v5\n      with:\n        path: ${{ env.HUGO_CACHEDIR }}\n        key: ${{ runner.os }}-${{ env.CACHE_KEY }}-${{ github.run_id }}\n        restore-keys: |\n          ${{ runner.os }}-${{ env.CACHE_KEY }}-\n\n    - name: Display environment\n      run: npm run env\n\n    - name: Build main site\n      run: npm run build:cache\n\n    # The example site is to be published to demo.gethinode.com\n    - name: Build example site\n      run: npm run build:example:ci\n"
  },
  {
    "path": ".github/workflows/mod-update.yml",
    "content": "name: Update Hugo dependencies\non:\n  workflow_dispatch:\n  schedule:\n    - cron: '0 3 * * *' # run daily at 03:00 AM\n\npermissions:\n  contents: write\n  pull-requests: write\n\njobs:\n  update-mod:\n    runs-on: ubuntu-latest\n\n    steps:\n    - name: Checkout repository\n      uses: actions/checkout@v6\n\n    - name: Setup Node.js\n      uses: actions/setup-node@v6\n      with:\n        node-version: lts/*\n        cache: 'npm'\n        cache-dependency-path: '**/package-lock.json'\n\n    # [26/AUG/23] Adjusted from npm ci to prevent EBADPLATFORM error due to fsevents\n    - name: Install npm\n      run: npm i\n\n    - name: Update Hugo module dependencies\n      id: mod-updates\n      run: |\n        MOD_OUTPUT=$(npm run mod:update 2>&1)\n        echo \"$MOD_OUTPUT\"\n        MOD_UPDATES=$(echo \"$MOD_OUTPUT\" | grep '^go: upgraded' | sed 's/go: / - /' | sort -u)\n        echo 'MOD_UPDATES<<EOF' >> $GITHUB_OUTPUT\n        echo \"$MOD_UPDATES\" >> \"$GITHUB_OUTPUT\"\n        echo 'EOF' >> $GITHUB_OUTPUT\n\n    - name: Create Pull Request\n      uses: gethinode-actions/create-pull-request@v8\n      with:\n        token: ${{ secrets.HUGO_MOD_PR }}\n        commit-message: 'fix: update Hugo module dependencies'\n        committer: GitHub <noreply@github.com>\n        branch: hugo-mod-dependencies\n        delete-branch: true\n        title: 'Update Hugo module dependencies'\n        body: |\n          This PR is auto-generated by [create-pull-request][1].\n          \n          Changes to go.mod:\n          \n          ${{ steps.mod-updates.outputs.MOD_UPDATES }}\n\n          [1]: https://github.com/peter-evans/create-pull-request\n        labels: dependencies\n        add-paths: |\n          go.mod\n          go.sum\n          **/go.mod\n          **/go.sum\n"
  },
  {
    "path": ".github/workflows/release.yml",
    "content": "name: Release\non:\n  workflow_dispatch:\n  push:\n    branches:\n      - main\n      - beta\n\nenv:\n  HUSKY: 0\n\npermissions:\n  contents: read # for checkout\n\njobs:\n  release:\n    name: Release\n    runs-on: ubuntu-latest\n    permissions:\n      contents: write # to be able to publish a GitHub release\n      issues: write # to be able to comment on released issues\n      pull-requests: write # to be able to comment on released pull requests\n      id-token: write # to enable use of OIDC for npm provenance\n    \n    steps:\n      - name: Checkout repository\n        uses: actions/checkout@v6\n        with:\n          fetch-depth: 0\n\n      - name: Set up Node.js\n        uses: actions/setup-node@v6\n        with:\n          node-version: \"lts/*\"\n\n      - name: Install dependencies\n        run: npm clean-install\n\n      - name: Verify the integrity of provenance attestations and registry signatures for installed dependencies\n        run: npm audit signatures\n\n      - name: Release\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n        run: npx semantic-release"
  },
  {
    "path": ".gitignore",
    "content": "_vendor/\nprebuild/\nprebuild-headers/\nprebuild-headers-dev/\nprebuild-headers-prod/\npublic/\nresources/\nnode_modules/\n\n.DS_store\n.hugo_build.lock\n\n# Local Netlify folder and build files\n.netlify\ndart-sass/\n"
  },
  {
    "path": ".gitmodules",
    "content": ""
  },
  {
    "path": ".husky/commit-msg",
    "content": "npx --no -- commitlint --edit $1\n"
  },
  {
    "path": ".husky/install.mjs",
    "content": "// Skip Husky install in production and CI\nif (process.env.NODE_ENV === 'production' || process.env.CI === 'true') {\n    process.exit(0)\n}\nconst husky = (await import('husky')).default\nconsole.log(husky())"
  },
  {
    "path": ".husky/pre-commit",
    "content": "npm test\n"
  },
  {
    "path": ".markdownlint-cli2.jsonc",
    "content": "{\n  \"config\": {\n    \"default\": true,\n    \"MD013\": false,\n    \"MD024\": false,\n    \"MD026\": false,\n    \"MD034\": false,\n    \"MD051\": false,\n    \"MD053\": false,\n    \"MD055\": false,\n    \"MD056\": false\n  },\n  \"ignores\": [\"node_modules\", \"CHANGELOG.md\"]\n}\n"
  },
  {
    "path": ".stylelintignore",
    "content": "assets/scss/common/_variables.scss\nassets/scss/components/_syntax-dark.scss\nassets/scss/components/_syntax-light.scss\nassets/scss/vendor\nassets/scss/theme/fonts.scss\nassets/scss/app-dart.scss\nassets/scss/app.scss\nnode_modules\n"
  },
  {
    "path": ".stylelintrc.json",
    "content": "{\n  \"extends\": \"stylelint-config-standard-scss\",\n  \"rules\": {\n    \"no-empty-source\": null,\n    \"scss/comment-no-empty\": null,\n    \"scss/at-extend-no-missing-placeholder\": null,\n    \"scss/dollar-variable-colon-space-after\": null,\n    \"scss/dollar-variable-empty-line-before\": null,\n    \"color-function-notation\": null,\n    \"alpha-value-notation\": null,\n    \"selector-id-pattern\": null,\n    \"selector-class-pattern\": null,\n    \"scss/no-global-function-names\": null,\n    \"color-function-alias-notation\": null,\n    \"number-max-precision\": null,\n    \"hue-degree-notation\": null,\n    \"value-no-vendor-prefix\": null,\n    \"property-no-vendor-prefix\": null,\n    \"at-rule-no-unknown\": [\n      true,\n      {\n        \"ignoreAtRules\": [\n          \"extend\",\n          \"at-root\",\n          \"debug\",\n          \"warn\",\n          \"error\",\n          \"if\",\n          \"else\",\n          \"for\",\n          \"each\",\n          \"while\",\n          \"mixin\",\n          \"include\",\n          \"content\",\n          \"return\",\n          \"function\",\n          \"tailwind\",\n          \"apply\",\n          \"responsive\",\n          \"variants\",\n          \"screen\"\n        ]\n      }\n    ]\n  }\n}\n"
  },
  {
    "path": "CLAUDE.md",
    "content": "# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n## Overview\n\nHinode is a Hugo theme for documentation and blog sites built on Bootstrap 5. It uses Hugo's module system to manage dependencies. The theme is designed for performance, security (with CSP headers), and SEO.\n\n**Version 2 (templatev2 branch)** is a minimal core theme. Optional extensions like mod-blocks add features like pre-built Bookshop components for page building.\n\n## Common Development Commands\n\n### Development Server\n\n```bash\nnpm start                    # Start Hugo server with module vendoring\nnpm run start:example        # Start server using exampleSite\nnpm run start:prod          # Start server in production mode\nnpm run start:example:prod  # Start exampleSite in production mode\n```\n\n### Building\n\n```bash\nnpm run build               # Build site with minification\nnpm run build:example       # Build exampleSite\nnpm run build:debug         # Build with debug output\nnpm run build:headers       # Generate Netlify/server headers\n```\n\n### Linting & Testing\n\n```bash\nnpm test                    # Run all linters\nnpm run lint                # Run all linters\nnpm run lint:scripts        # ESLint for JavaScript (assets/js)\nnpm run lint:styles         # Stylelint for SCSS\nnpm run lint:markdown       # Markdownlint for Markdown files\n```\n\n### Module Management\n\n```bash\nnpm run mod:vendor          # Vendor Hugo modules to _vendor/\nnpm run mod:update          # Update all Hugo modules\nnpm run mod:tidy            # Clean up unused module dependencies\nnpm run mod:clean           # Remove module cache\n```\n\n### Maintenance\n\n```bash\nnpm run clean:public        # Remove generated public/ directories\nnpm run clean:install       # Remove node_modules and package-lock.json\nnpm run upgrade             # Update npm and Hugo module dependencies\n```\n\n## Architecture\n\n### Hugo Module System\n\nThe theme uses Hugo's module system extensively. All modules are vendored to `_vendor/` for reproducible builds. Key modules include:\n\n**Core modules (always loaded):**\n\n- `mod-bootstrap` - Bootstrap 5 framework\n- `mod-utils` - Utility functions and helpers (GetPadding, GetBreakpoint, LogWarn, InitArgs, etc.)\n- `mod-flexsearch` - Full-text search functionality\n- `mod-fontawesome` - Icon support\n\n**Optional modules:**\n\n- `mod-blocks` - Pre-built Bookshop blocks for page building (NOT loaded by default in v2)\n- `mod-katex`, `mod-mermaid`, `mod-leaflet`, `mod-lottie` - Feature modules\n\nModule configuration is in `config/_default/hugo.toml` under `[module.imports]`. Always run `npm run mod:vendor` after module changes.\n\n### Partial Ownership (v2 Architecture)\n\n**Hinode owns (core partials):**\n\n- `assets/card-group.html`, `assets/nav.html`, `assets/video.html`, `assets/table.html`, `assets/timeline.html` - Used by Hinode shortcodes\n- `assets/live-image.html`, `assets/live-pages.html` - Used by Hinode templates\n- `assets/section-title.html` - Section heading utility (used by Hinode pages and mod-blocks components)\n- All `mod-utils` utilities (GetPadding, GetBreakpoint, LogWarn, InitArgs, etc.)\n\n**mod-blocks owns (block-specific partials):**\n\n- `assets/hero.html`, `assets/contact.html`, `assets/faq.html`, `assets/menu.html`, `assets/testimonial-carousel.html`, `assets/preview.html`\n- `utilities/section.html` - Component wrapper\n- `page/contact.html` - Contact page template\n\n**Dependency flow:**\n\n```text\nHinode v2 (core theme)\n  ├── mod-utils (GetPadding, LogWarn, etc.)\n  ├── Shared partials (card-group, video, table, section-title, etc.)\n  └── Does NOT import mod-blocks by default\n\nmod-blocks v1.1+ (optional extension)\n  ├── 16 Bookshop components\n  ├── Block-specific partials (7 files)\n  └── Depends on Hinode v2 (inherits section-title from Hinode)\n```\n\n### Component Library (Bookshop) - Optional via mod-blocks\n\nBookshop components are provided by the optional **mod-blocks** module. When installed, components live in `component-library/components/`. Each component has:\n\n- `*.hugo.html` - Hugo template\n- `*.scss` - Component styles\n- `*.bookshop.yml` - Schema definition\n\nComponents are mounted to multiple locations via `hugo.toml`:\n\n- `layouts/partials/bookshop/` - Templates\n- `data/structures/` - Schemas\n- `assets/scss/modules/bookshop/` - Styles\n\n#### Bookshop Component Architecture\n\nBookshop components follow a two-layer architecture:\n\n**1. Component partial** (e.g., `layouts/partials/assets/preview.html`):\n\n- Contains the core component logic and rendering\n- Uses **component-specific arguments** (e.g., `url`, `device`, `heading` for preview)\n- These arguments should be defined in the component's structure file\n\n**2. Bookshop wrapper** (e.g., `component-library/components/preview/preview.hugo.html`):\n\n- Calls the component partial with component-specific arguments\n- Wraps output with `utilities/section.html` for section-level styling\n- Passes **section arguments** to the wrapper (e.g., `id`, `background`, `width`, `justify`, `wrapper`, `fluid`, `theme`, `cover`, `overlay-mode`, `section-class`, `bg-class`)\n\n**Important distinctions:**\n\n- **Section arguments are NOT part of the component partial** - they're handled by the section wrapper\n- **Structure files should only include component-specific arguments** - arguments actively used by the partial\n- **Section arguments are defined in Bookshop specs** (`.hugo.html` and `.bookshop.yml`) but not in the component's structure file\n- Example: `preview.yml` defines `url`, `device`, `heading` (used by `preview.html`), but NOT `background`, `width`, etc. (only used by section wrapper)\n\n**Example structure:**\n\n```hugo\n{{/* preview.hugo.html - Bookshop wrapper */}}\n{{ $raw := partial \"assets/preview.html\" (dict\n    \"url\"      .url       {{/* component-specific */}}\n    \"device\"   .device    {{/* component-specific */}}\n    \"heading\"  .heading   {{/* component-specific */}}\n) }}\n\n{{ partial \"utilities/section.html\" (dict\n    \"raw\"            $raw\n    \"background\"     .background     {{/* section argument */}}\n    \"width\"          .width           {{/* section argument */}}\n    \"theme\"          .theme           {{/* section argument */}}\n    {{/* ... other section arguments ... */}}\n)}}\n```\n\n### Version 2 Architecture Philosophy\n\n**Design Goal:** Hinode v2 is a minimal core theme that works standalone for documentation and blog sites. Optional features are provided through separate modules.\n\n**What's in Hinode v2 core:**\n\n- Hugo templates for pages, lists, and singles\n- Shortcode library (accordion, alert, card, carousel, etc.)\n- Shared partials (section-title, card-group, video, table, timeline)\n- Bootstrap 5 styling via mod-bootstrap\n- Search via mod-flexsearch\n- Icons via mod-fontawesome\n- Core utilities via mod-utils\n\n**What's optional (via modules):**\n\n- **mod-blocks** - Pre-built Bookshop components for visual page building\n- **mod-katex** - LaTeX math rendering\n- **mod-mermaid** - Diagram rendering\n- **mod-leaflet** - Interactive maps\n- **mod-lottie** - Lottie animations\n\n**Key architectural decisions:**\n\n1. **No circular dependencies** - Hinode doesn't import mod-blocks; mod-blocks imports Hinode\n2. **Clear ownership** - Block-specific partials (hero, contact, faq) live in mod-blocks; shared utilities (section-title, card-group) live in Hinode\n3. **Module inheritance** - mod-blocks inherits Hinode's shared partials automatically\n4. **Backwards compatibility** - Sites can still use mod-blocks by explicitly importing it\n\n### Directory Structure\n\n- `layouts/` - Theme templates and shortcodes\n  - `baseof.html` - Base template with navbar, footer, and content blocks\n  - `_partials/` - Reusable template components\n  - `_shortcodes/` - Hugo shortcodes for content (accordion, alert, card, etc.)\n- `assets/` - Source assets (JS, SCSS, images, icons)\n  - `scss/` - Organized into components/, layouts/, theme/, helpers/\n  - `js/` - JavaScript modules\n- `config/` - Hugo configuration\n  - `_default/hugo.toml` - Main config with module imports\n  - `postcss.config.js` - PostCSS with PurgeCSS and autoprefixer\n- `content/` - Theme content (minimal, main content in exampleSite)\n- `data/` - Data files for theme configuration\n- `i18n/` - Translation files (en, nl, fr, de, pl, pt-br, zh-hans, zh-hant)\n- `exampleSite/` - Full example site for testing theme\n- `static/` - Static assets copied directly to output\n\n### CSS Pipeline\n\nCSS uses PostCSS with:\n\n1. **Autoprefixer** - Adds vendor prefixes\n2. **cssnano** - Minification\n3. **PurgeCSS** - Removes unused CSS based on `hugo_stats.json`\n\nPurgeCSS safelist is defined in `config/postcss.config.js`. When adding new dynamic classes or Bootstrap components, update the safelist to prevent removal.\n\n### Version Management\n\nThe theme supports versioned documentation with sidebar menus per version. Version detection happens in `baseof.html` using `utilities/GetVersion.html` partial.\n\n### Shortcodes System\n\nExtensive shortcode library in `layouts/_shortcodes/` provides Bootstrap components accessible in Markdown:\n\n- Layout: accordion, card, carousel, collapse, navbar, tabs\n- UI: alert, badge, button, spinner, toast, tooltip\n- Content: image, video, table, timeline\n- Typography: abbr, kbd, mark, sub, sup\n\n### Argument and Type Initialization System\n\nHinode uses `mod-utils` to provide a robust argument validation and initialization system\nfor shortcodes, partials, and Bookshop components.\n\n**Key components:**\n\n- `utilities/InitArgs.html` - Validates and initializes arguments with type checking and\n  defaults\n- `utilities/InitTypes.html` - Loads type definitions and merges structure-specific with\n  global definitions\n- `data/structures/_arguments.yml` - Global argument definitions (type, default, options,\n  etc.)\n- `data/structures/<name>.yml` - Structure-specific argument definitions for each shortcode\n  or component\n\n**How it works:**\n\n1. **Structure definition inheritance:** Each shortcode/component has a structure file\n   (e.g., `example.yml`) that defines its arguments. These definitions automatically\n   inherit from the global `_arguments.yml` file.\n\n2. **Automatic camelCase conversion:** Hyphenated argument names (e.g., `show-preview`)\n   are automatically converted to camelCase (e.g., `showPreview`) for easier access in\n   templates. Both versions are available: `$args.show-preview` and `$args.showPreview`.\n\n3. **Default value application:** Arguments with `default` or `config` fields in their\n   definition are automatically initialized with those values if not provided by the user.\n\n4. **Type validation:** Arguments are validated against their declared types. The system\n   automatically casts between compatible types (e.g., string `\"true\"` to boolean `true`).\n\n5. **Deprecation warnings:** Deprecated arguments (marked with `deprecated` field) trigger\n   warnings when used, guiding users to the preferred alternative.\n\n**Structure definition format:**\n\nStructure files follow the DRY principle with clear separation of concerns:\n\n**Global definitions** (`mod-utils/data/structures/_arguments.yml`):\n\n- `type` - Argument data type\n- `default` - Default value (if applicable)\n- `options` - Valid values for select types\n- `comment` - Description of what the argument does\n\n**Component-specific definitions** (`data/structures/<name>.yml`):\n\n- `optional` - Whether argument is required or optional\n- `deprecated` - Version when argument was deprecated (component-specific)\n- `alternative` - Replacement argument when deprecated (component-specific)\n- `release` - Version when argument was introduced (component-specific)\n\n```yaml\n# Component structure file (e.g., data/structures/preview.yml)\ncomment: >-\n  Renders a live URL preview with switchable device views.\narguments:\n  url:\n    optional: false\n    release: v1.0.0\n  device:\n    optional: true\n    release: v1.0.0\n  heading:\n    optional: true\n    release: v1.0.0\n  old-param:\n    optional: true\n    deprecated: v1.1.0\n    alternative: device\n```\n\n```yaml\n# Global argument definitions (mod-utils/data/structures/_arguments.yml)\narguments:\n  url:\n    type: string\n    comment: >-\n      Address of the link destination, either a local reference or an external\n      address. Include the `scheme` when referencing an external address.\n  device:\n    type: select\n    default: desktop\n    comment: >-\n      Device view to display by default in preview component. Determines the\n      initial iframe dimensions and active tab.\n    options:\n      values:\n        - desktop\n        - tablet\n        - mobile\n  heading:\n    type: heading\n    comment: >-\n      Heading of the content block, including a preheading and content element.\n```\n\n**When to add to _arguments.yml:**\n\n- New argument used by multiple components - add full type definition to global file\n- Component-specific argument - can define inline in structure file (but prefer global for reusability)\n- Override default or add options - define inline in structure file (inherits base type from global)\n\n**Common pitfall - Boolean argument handling:**\n\nWhen accessing boolean arguments that could be explicitly set to `false`, **DO NOT use the\n`or` operator** for fallback logic:\n\n```hugo\n{{/* WRONG - or operator treats false as falsy and skips it */}}\n{{- $showPreview := or $args.showPreview $args.show_preview }}\n\n{{/* CORRECT - directly access the camelCase version */}}\n{{- $showPreview := $args.showPreview }}\n```\n\nThe `or` operator returns the first truthy value, so `or false <fallback>` will skip\n`false` and return the fallback instead of honoring the explicit `false` value.\n\n**Best practices:**\n\n- Always use `InitArgs` at the start of shortcodes and partials to validate arguments\n- Define structure files in `data/structures/` for all shortcodes and components\n- **Structure files should only reference arguments by name** - type definitions go in `_arguments.yml`\n- **Only include arguments actively used by the component partial** - section arguments (like `id`, `background`, `width`, `justify`, `wrapper`, `fluid`, `theme`, `cover`, `overlay-mode`, `section-class`, `bg-class`) are handled by the Bookshop section wrapper and should NOT be in the component's structure file\n- Add new argument types to `mod-utils/data/structures/_arguments.yml` for reuse across components\n- Mark `deprecated`, `alternative`, and `release` in **component structure files** (component-specific metadata)\n- Use hyphenated names for new arguments (e.g., `show-preview` not `show_preview`)\n- Access arguments via their camelCase versions (e.g., `$args.showPreview`)\n\n**Example usage in a shortcode:**\n\n```hugo\n{{/* Initialize and validate arguments */}}\n{{- $args := partial \"utilities/InitArgs.html\" (dict\n    \"structure\" \"example\"\n    \"args\" .Params\n    \"named\" .IsNamedParams\n    \"group\" \"shortcode\"\n) -}}\n\n{{/* Check for errors/warnings */}}\n{{- if or $args.err $args.warnmsg -}}\n    {{- partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict\n        \"partial\"  \"shortcodes/example.html\"\n        \"msg\"      \"Invalid arguments\"\n        \"details\"  ($args.errmsg | append $args.warnmsg)\n        \"file\"     page.File\n        \"position\" .Position\n    )}}\n{{- end -}}\n\n{{/* Access arguments using camelCase */}}\n{{- $showPreview := $args.showPreview }}\n{{- $showMarkup := $args.showMarkup }}\n```\n\n### Content Security Policy\n\nCSP headers are auto-generated via Hugo's segments feature. The theme includes `mod-csp` for Content Security Policy management. Headers are defined in `netlify.toml` and generated via `npm run build:headers`.\n\n### Internationalization\n\nMulti-language support with translations in `i18n/`. Default language is English (`en-us`). Language configuration in `config/_default/hugo.toml`.\n\n### Page Templates (v2)\n\n**List pages** (`layouts/list.html`):\n\n- If page has `content_blocks` frontmatter → renders via `page/blocks.html` (requires mod-blocks)\n- Otherwise → renders via `page/articles.html` (core Hinode, uses section-title.html for header)\n\n**Single pages** (`layouts/single.html`):\n\n- Renders content via `utilities/ProcessContent` partial\n- If page has `content_blocks` → also renders via `page/blocks.html`\n\n**Key partials:**\n\n- `page/articles.html` - Default list page rendering with section-title header and card grid\n- `page/blocks.html` - Renders Bookshop content blocks (requires mod-blocks)\n- `assets/section-title.html` - Shared heading utility with preheading, subtitle, links support\n\n## Key Configuration Files\n\n- `hugo.toml` - Main Hugo config with modules, mounts, build settings\n- `package.json` - npm scripts and dependencies\n- `go.mod` - Hugo module dependencies (Go modules)\n- `postcss.config.js` - PostCSS pipeline with PurgeCSS safelist\n- `netlify.toml` - Netlify build config and security headers\n- `.eslintrc.yml` - JavaScript linting (ES6, browser environment)\n- `.stylelintrc.json` - SCSS linting (standard-scss)\n- `.markdownlint-cli2.jsonc` - Markdown linting rules\n\n## Important Development Notes\n\n### When Working with mod-blocks (Optional)\n\n**Note:** Hinode v2 does NOT include mod-blocks by default. If you need Bookshop components:\n\n1. Add mod-blocks to `hugo.toml`: `path = \"github.com/gethinode/mod-blocks\"`\n2. Run `npm run mod:vendor` to vendor the module\n3. Components live in mod-blocks repository at `component-library/components/`\n4. Each component has three files: `.hugo.html`, `.scss`, `.bookshop.yml`\n5. Update PurgeCSS safelist in `config/postcss.config.js` if components add dynamic classes\n\n### When Adding Hugo Modules\n\n1. Add to `go.mod` requires section\n2. Add to `[module.imports]` in `hugo.toml`\n3. Run `npm run mod:vendor` to vendor the module\n4. If module has styles, add to PurgeCSS safelist in `postcss.config.js`\n\n### When Working with Layouts\n\n- `baseof.html` is the main template; it sets up version-aware menus, content blocks, overlay mode\n- Partials in `_partials/` are organized: `head/`, `footer/`, `page/`, `utilities/`, `assets/`\n- The theme uses `.Scratch` extensively for passing data between partials\n\n### Build Process\n\n1. `hugo mod vendor` - Vendors modules to `_vendor/`\n2. Hugo build generates `hugo_stats.json` with used classes/tags/ids\n3. PostCSS processes SCSS, using `hugo_stats.json` to purge unused CSS\n4. Final output in `public/` or `exampleSite/public/`\n\n### Testing Changes\n\nTest with both main site and exampleSite:\n\n- `npm start` - Test theme directly\n- `npm run start:example` - Test with full example content\n- `npm run lint` - Check code quality before committing\n\n### Git Workflow\n\n- Main branch: `main` (production releases)\n- Development branch: `develop`\n- Uses semantic-release for automated versioning\n- Commits follow Angular Conventional Commits (enforced by commitlint)\n- Husky pre-commit hooks run linters automatically\n\n### Commit Message Format\n\nFollow Angular Conventional Commits format:\n\n```text\n<type>(<scope>): <subject>\n\n<body>\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>\n```\n\n**Common types:**\n\n- `feat` - New feature\n- `fix` - Bug fix\n- `refactor` - Code refactoring\n- `style` - Styling changes (CSS/SCSS only, no logic changes)\n- `docs` - Documentation changes\n- `test` - Adding or updating tests\n- `chore` - Build process, dependencies, tooling\n\n**Common scopes:**\n\n- `i18n` - Internationalization/translations\n- `components` - Component changes\n- `docs` - Documentation\n- `theme` - Theme styling\n- `build` - Build process\n\n**Example commits:**\n\n- `feat(i18n): add missing translations for testimonials`\n- `fix(components): correct variable reference in testimonials`\n- `style: add width constraint to section-title class`\n- `refactor(components): improve testimonials component layout`\n\n### Linting & Code Quality\n\nRun linters before committing (pre-commit hooks will enforce this):\n\n```bash\nnpm test              # Run all linters (recommended before commits)\nnpm run lint:scripts  # Check JavaScript\nnpm run lint:styles   # Check SCSS\nnpm run lint:markdown # Check Markdown documentation\n```\n\n**Linting tools:**\n\n- **ESLint** (`.eslintrc.yml`) - JavaScript linting with ES6 and browser environment\n- **Stylelint** (`.stylelintrc.json`) - SCSS linting with standard-scss rules\n- **Markdownlint** (`.markdownlint-cli2.jsonc`) - Markdown file linting\n\n**Markdown linting rules** (`.markdownlint-cli2.jsonc`):\n\n- Enforced: MD040 (fenced code blocks must have language specified), MD032 (lists must be surrounded by blank lines), and others\n- Disabled rules: MD013 (line length), MD024 (duplicate headers), MD026 (trailing punctuation), MD034 (bare URLs), MD051 (link fragments), MD053 (link reference definitions), MD055 (table pipe escaping), MD056 (table header/body cell count)\n- Ignored: `node_modules/`, `CHANGELOG.md`\n\n**Commit message linting** (enforced by commitlint via pre-commit hooks):\n\n- Body lines must not exceed 100 characters (enforced by `body-max-line-length`)\n- When formatting multi-line bullet points, break long lines at 100 characters\n- Use indentation (2 spaces) for continuation lines to maintain readability\n\nExample of correctly formatted commit message:\n\n```text\nrefactor: consolidate version detection into modular partials\n\n- Replace theme-version.html with improved version.html partial\n- Extract version detection logic into reusable modular partials\n  (mod-version and env-version)\n- Update version regex to support both major version (v2) and\n  non-versioned module paths\n- Add fallback to HUGO_HINODE_VERSION environment variable for\n  CI/CD builds\n```\n\n**Important notes:**\n\n- Pre-commit hooks run automatically when committing\n- If hooks modify files (e.g., formatting), the commit will fail and you should commit again\n- Always test changes with the example site: `npm run build:example`\n- Check for i18n warnings when modifying translations\n- Ensure all language variants build without warnings\n- If using mod-blocks, test that components still work after Hinode changes\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2022 - 2026 Hinode Team / Mark Dumay\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\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "# Hugo Theme Hinode\n\n<!-- markdownlint-disable MD033 -->\n<!-- Tagline -->\n<p align=\"center\">\n    <b>A clean documentation and blog theme for your Hugo site based on Bootstrap 5</b>\n    <br />\n</p>\n\n<!-- Badges -->\n<p align=\"center\">\n    <a href=\"https://gohugo.io\">\n        <img src=\"https://img.shields.io/badge/generator-hugo-brightgreen\" alt=\"Hugo website\">\n    </a>\n    <a href=\"https://gethinode.com\">\n        <img src=\"https://img.shields.io/badge/theme-hinode-blue\" alt=\"Hinode theme\">\n    </a>\n    <a href=\"https://app.netlify.com/sites/gethinode-demo/deploys\">\n        <img src=\"https://img.shields.io/netlify/0ad42e3e-fdfa-4d37-8e26-58badd429a67\"  alt=\"Netlify Status\">\n    </a>\n    <a href=\"https://stats.uptimerobot.com/xyGVYhLJmV\">\n        <img src=\"https://img.shields.io/uptimerobot/status/m791334689-73d9dfc82030f4f955b2d6bb\" alt=\"UptimeRobot Status\">\n    </a>\n    <a href=\"https://github.com/gethinode/hinode/commits/main\">\n        <img src=\"https://img.shields.io/github/last-commit/gethinode/hinode.svg\" alt=\"Last commit\">\n    </a>\n    <a href=\"https://github.com/gethinode/hinode/issues\">\n        <img src=\"https://img.shields.io/github/issues/gethinode/hinode.svg\" alt=\"Issues\">\n    </a>\n    <a href=\"https://github.com/gethinode/hinode/pulls\">\n        <img src=\"https://img.shields.io/github/issues-pr-raw/gethinode/hinode.svg\" alt=\"Pulls\">\n    </a>\n    <a href=\"https://github.com/gethinode/hinode/blob/main/LICENSE\">\n        <img src=\"https://img.shields.io/github/license/gethinode/hinode\" alt=\"License\">\n    </a>\n</p>\n\n<!-- Table of Contents -->\n<p align=\"center\">\n  <a href=\"#about\">About</a> •\n  <a href=\"#prerequisites\">Prerequisites</a> •\n  <a href=\"#installation\">Installation</a> •\n  <a href=\"#configuration\">Configuration</a> •\n  <a href=\"#contributing\">Contributing</a> •\n  <a href=\"#donate\">Donate</a> •\n  <a href=\"#license\">License</a>\n</p>\n<!-- markdownlint-enable MD033 -->\n\n## About\n\n![Logo](https://raw.githubusercontent.com/gethinode/hinode/main/static/img/logo.png)\n\n- [Online Demo][demo]\n- [PageSpeed Insights][pagespeed]\n- [Mozilla Observatory][observatory]\n\nHinode is a clean documentation and blog theme for [Hugo][hugo], an open-source static site generator. Based on the [Bootstrap 5][bootstrap] framework, the rendered site is fast, secure, and responsive. Hinode uses [FlexSearch][flexsearch] to enable full text search across your site. Finally, the theme supports [Node Package Manager][npm] (npm) to automate the build process and to keep track of dependencies.\n\nDetailed information about Hinode is available on the [official website][website].\n\n## Prerequisites\n\nHinode is a [Hugo theme that uses modules][hugo_modules] to install and maintain various components. It can be installed using either Hugo or npm. If you would like to take advantage of automation, the npm approach is recommended. Refer to the [Hinode template][repository_template] for installation instructions with npm.\n\nThe installation instructions in this readme install Hinode as a regular Hugo theme. Hinode requires the following software to be installed on your local machine.\n\n- [Go binary][golang_download]\n- [Hugo][hugo_download] (extended version)\n\n[Git][git_download] is recommended, but is not a strict requirement.\n\n## Installation\n\n<!-- markdownlint-disable MD033 -->\n<details>\n<summary>Installation notes for Windows</summary>\n\nThe installation for Windows requires PowerShell v7. Download it from the Microsoft Store as needed. Check your current version with the command `$PSVersionTable`.\n</details>\n<!-- markdownlint-enable MD033 -->\n\nStart a new Hinode project in three steps:\n\n1. **Create a new site**\n\n    ```bash\n    hugo new site my-hinode-site && cd my-hinode-site\n    ```\n\n2. **Initialize the module system**\n\n    ```bash\n    hugo mod init example.com/my-hinode-site\n    echo \"[[module.imports]]\" >> hugo.toml\n    echo \"path = 'github.com/gethinode/hinode'\" >> hugo.toml\n    ```\n\n3. **Start a development server**\n\n    ```bash\n    hugo server\n    ```\n\n## Optional Extensions\n\nHinode v2 is a minimal core theme. Optional extensions are available to add features:\n\n- **[mod-blocks][mod-blocks]** - Pre-built Bookshop blocks for quickly building page layouts (hero, cards, FAQ, testimonials, etc.)\n- Other modules - See the [official modules list][modules]\n\nTo add mod-blocks to your site:\n\n```toml\n[[module.imports]]\n  path = \"github.com/gethinode/mod-blocks\"\n```\n\n## Configuration\n\nSee the [official documentation][getstarted] on how to configure your site.\n\n## Contributing\n\nSee the [official documentation][contribute] on how to contribute to the open-source development of Hinode.\n\n## Credits\n\nHinode is inspired by the following themes:\n\n- [Blist][blist] - a clean and fast blog theme for your Hugo site using Tailwind CSS.\n- [Doks][doks] - a Hugo theme for building secure, fast, and SEO-ready documentation websites, which you can easily update and customize.\n\n## Donate\n\n<!-- markdownlint-disable MD033 -->\n<a href=\"https://www.buymeacoffee.com/markdumay\" target=\"_blank\" rel=\"noopener noreferrer nofollow\"><img src=\"https://cdn.buymeacoffee.com/buttons/lato-orange.png\" alt=\"Buy Me A Coffee\" style=\"height: 51px !important;width: 217px !important;\"></a>\n<!-- markdownlint-enable MD033 -->\n\n## License\n\nThe `hinode`, `docs`, and `template` codebase is released under the [MIT license][license]. The documentation of Hinode is licensed under the Creative Commons [(CC BY-NC 4.0)][cc-by-nc-4.0] license. This includes all files within the repository's `/content` and `/exampleSite/content` folders and their children, as well as the \"README\" in the repository root. This applies to all public repositories maintained by `gethinode` on GitHub, including the `gethinode/hinode`, `gethinode/template`, and `gethinode/docs` repositories, unless specified otherwise.\n\n<!-- MARKDOWN PUBLIC LINKS -->\n[blist]: https://github.com/apvarun/blist-hugo-theme\n[bootstrap]: https://getbootstrap.com\n[cc-by-nc-4.0]: https://creativecommons.org/licenses/by-nc/4.0/\n[doks]: https://github.com/h-enk/doks\n[flexsearch]: https://github.com/nextapps-de/flexsearch\n[git_download]: https://git-scm.com\n[hugo]: https://gohugo.io\n[hugo_download]: https://gohugo.io/installation\n[hugo_modules]: https://gohugo.io/hugo-modules/\n[netlify]: https://www.netlify.com\n[nodejs]: https://nodejs.org\n[npm]: https://www.npmjs.com\n[observatory]: https://observatory.mozilla.org/analyze/demo.gethinode.com\n[pagespeed]: https://pagespeed.web.dev/report?url=https%3A%2F%2Fdemo.gethinode.com%2F\n\n<!-- MARKDOWN MAINTAINED LINKS -->\n[contribute]: https://gethinode.com/contribute\n[getstarted]: https://gethinode.com/docs\n[golang_download]: https://go.dev/dl/\n[mod-blocks]: https://github.com/gethinode/mod-blocks\n[modules]: https://gethinode.com/docs/getting-started/modules/\n[demo]: https://demo.gethinode.com/\n[license]: https://github.com/gethinode/hinode/blob/main/LICENSE\n[repository]: https://github.com/gethinode/hinode.git\n[repository_template]: https://github.com/gethinode/template.git\n[website]: https://gethinode.com/\n"
  },
  {
    "path": "archetypes/default.md",
    "content": "---\n# author: \ntitle: {{ replace .Name \"-\" \" \" | title }}\ndate: {{ .Date }}\ndraft: true\n# layout: \n# description: \n# tags: \n# icon: \n# thumbnail: \n    # url: \n    # author: \n    # authorURL: \n    # origin: \n    # originURL: \n---\n"
  },
  {
    "path": "assets/js/alert.js",
    "content": "/* eslint-disable no-undef */\nconst alert = document.getElementById('page-alert')\nconst closeBtn = document.getElementById('page-alert-btn-close')\nif (alert !== null && closeBtn !== null) {\n  const version = alert.getAttribute('data-page-alert-version') || 'unknown'\n  const hideAlert = getSessionStorage(`page-alert-${version}`, null, 'functional') !== null\n  if (hideAlert) {\n    alert.classList.add('d-none')\n  }\n\n  closeBtn.addEventListener('click', () => {\n    setSessionStorage(`page-alert-${version}`, 'seen', 'functional')\n    alert.classList.add('d-none')\n  })\n}\n"
  },
  {
    "path": "assets/js/animation.js",
    "content": "function reveal () {\n  const reveals = document.querySelectorAll('.reveal')\n\n  for (let i = 0; i < reveals.length; i++) {\n    const windowHeight = window.innerHeight\n    const elementTop = reveals[i].getBoundingClientRect().top\n    const elementVisible = 150\n\n    if (elementTop < windowHeight - elementVisible) {\n      reveals[i].classList.add('active')\n      reveals[i].classList.remove('reveal')\n    } else {\n      reveals[i].classList.remove('active')\n    }\n  }\n}\n\nwindow.addEventListener('scroll', reveal)\n"
  },
  {
    "path": "assets/js/clipboard.js",
    "content": "/*\nSource:\n  - https://simplernerd.com/hugo-add-copy-to-clipboard-button/\n*/\n\nconst svgCopy =\n  '<svg xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" width=\"16\" height=\"16\" fill=\"currentColor\" class=\"bi bi-clipboard\" viewBox=\"0 0 16 16\"><path d=\"M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z\"/><path d=\"M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z\"/></svg>'\nconst svgCheck =\n  '<svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\"><path fill-rule=\"evenodd\" fill=\"rgb(63, 185, 80)\" d=\"M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z\"></path></svg>'\n\nconst addCopyButtons = clipboard => {\n  // 1. Look for pre > code elements in the DOM\n  document.querySelectorAll('pre > code').forEach(codeBlock => {\n    // 2. Create a button that will trigger a copy operation\n    const button = document.createElement('button')\n    button.className = 'clipboard-button'\n    button.setAttribute('data-toast-target', 'toast-copied-code-message')\n    button.setAttribute('aria-label', '{{ T \"copyToClipboard\" }}')\n    button.type = 'button'\n    button.innerHTML = svgCopy\n    button.addEventListener('click', () => {\n      const text = codeBlock.innerText.split('\\n').filter(Boolean).join('\\n')\n      clipboard.writeText(text).then(\n        () => {\n          button.blur()\n          button.innerHTML = svgCheck\n          setTimeout(() => (button.innerHTML = svgCopy), 2000)\n        },\n        () => (button.innerHTML = 'Error')\n      )\n    })\n    // 3. Append the button directly before the pre tag\n    const pre = codeBlock.parentNode\n    pre.parentNode.insertBefore(button, pre)\n  })\n}\n\nif (navigator && navigator.clipboard) {\n  addCopyButtons(navigator.clipboard)\n}\n\ndocument.querySelectorAll('[data-clipboard]').forEach(trigger => {\n  const text = trigger.getAttribute('data-clipboard')\n  trigger.addEventListener('click', () => {\n    navigator.clipboard.writeText(text)\n  })\n})\n"
  },
  {
    "path": "assets/js/critical/_cookie.js",
    "content": "/* eslint-disable no-unused-vars */\nfunction hasConsent (category) {\n  // TODO: placeholder function\n  return true\n}\n\nfunction getLocalStorage (key, def, category) {\n  if (hasConsent(category)) {\n    return localStorage.getItem(key)\n  } else {\n    return def\n  }\n}\n\nfunction setLocalStorage (key, val, category) {\n  if (hasConsent(category)) {\n    localStorage.setItem(key, val)\n  }\n}\n\nfunction getSessionStorage (key, def, category) {\n  if (hasConsent(category)) {\n    return sessionStorage.getItem(key)\n  } else {\n    return def\n  }\n}\n\nfunction setSessionStorage (key, val, category) {\n  if (hasConsent(category)) {\n    sessionStorage.setItem(key, val)\n  }\n}\n"
  },
  {
    "path": "assets/js/critical/color.js",
    "content": "{{- if (or site.Params.main.enableDarkMode site.Params.main.colorMode.enabled) -}}\n\n/*!\n * Color mode toggler for Bootstrap's docs (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Licensed under the Creative Commons Attribution 3.0 Unported License.\n */\n\n(() => {\n  'use strict'\n\n  const supportedThemes = ['auto', 'dark', 'light'];\n\n  // retrieves the currently stored theme from local storage\n  const storedTheme = getLocalStorage('theme', 'auto', 'functional')\n\n  // retrieves the theme preferred by the client, defaults to light\n  function getPreferredTheme() {\n    return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'\n  }\n\n  // retrieves the current theme, either from local storage or client's preferences\n  function getTheme() {\n    if (storedTheme) {\n      return storedTheme\n    } else {\n      const preference = getPreferredTheme()\n      setLocalStorage('theme', preference, 'functional')\n      return preference\n    }\n  }\n\n  // applies and stores requested theme\n  function setTheme(theme) {\n    if (!supportedThemes.includes(theme)) {\n      theme = 'auto'\n    }\n    setLocalStorage('theme', theme, 'functional')\n\n    if (theme === 'auto') {\n      theme = getPreferredTheme()\n    }\n    document.documentElement.setAttribute('data-bs-theme', theme)\n    // store main theme separately, to avoid the navbar mode icon uses a local variable\n    document.documentElement.setAttribute('data-bs-main-theme', theme)\n\n    updateSelectors()\n  }\n\n  // alternates the currently active theme\n  function toggleTheme() {\n    const target = document.documentElement.getAttribute('data-bs-theme') === 'dark' ? 'light' : 'dark'\n    setTheme(target)\n  }\n\n  function updateSelectors() {\n    document.querySelectorAll('.navbar-mode-selector').forEach(chk => {\n      chk.checked = (document.documentElement.getAttribute('data-bs-theme') === 'light')\n    })\n  }\n\n  window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {\n    if (storedTheme !== 'light' || storedTheme !== 'dark') {\n      setTheme(getPreferredTheme())\n    }\n  })\n\n  window.addEventListener('DOMContentLoaded', () => {\n    document.querySelectorAll('.navbar-mode-selector').forEach(chk => {\n      chk.addEventListener('change', function () {\n        document.documentElement.setAttribute('data-bs-theme-animate', 'true')\n        toggleTheme()\n      })\n    })\n  })\n\n  window.addEventListener('load', () => {\n    // update the selectors when all elements are ready\n    updateSelectors()\n  })\n\n  // initialize theme as soon as possible to reduce screen flickering\n  setTheme(getTheme())\n})()\n\n{{- end -}}"
  },
  {
    "path": "assets/js/critical/languageSelector.js",
    "content": "/* eslint-disable */\n{{- if site.Params.main.enableLanguageSelectionStorage -}}\n{{- $folder := (urls.Parse site.BaseURL).Path | default \"/\" -}}\n\n(() => {\n  'use strict'\n\n  const folder = '{{ $folder }}'\n\n  // Function to get the selected language from local storage\n  function getLanguage () {\n    return getLocalStorage('selectedLanguage', document.documentElement.lang, 'functional')\n  }\n\n  // Function to set the selected language in local storage\n  function setLanguage (language) {\n    setLocalStorage('selectedLanguage', language, 'functional')\n  }\n  \n  // Function to apply the selected language to the website\n  function applyLanguage (language, href) {\n    if (document.documentElement.lang !== language) {\n      if (href) {\n        if (window.location.pathname !== href) {\n          window.location.href = href\n        }\n      } else {\n        let target = folder + language + '/'\n        if (window.location.href !== target) {\n          window.location.href = target\n        }\n      }\n    }\n  }\n\n  // Event listener for language selection\n  document.addEventListener('DOMContentLoaded', () => {\n    // override stored language when query string contains force is true\n    let params = new URLSearchParams(document.location.search)\n    let force = params.get('force')\n    if (force !== null && force.toLowerCase() == 'true') {\n      setLanguage(document.documentElement.lang)\n      return\n    }\n\n    // continue with regular code\n    const storedLanguage = getLanguage()\n    const languageItems = document.querySelectorAll('#language-selector[data-translated=true] .dropdown-item')\n\n    const link = document.querySelector(\"link[rel='canonical']\")\n    let alias = ''\n    if (link !== null) {\n      alias = link.getAttribute('href')\n    }\n    \n    if ((alias !== '') && (window.location.href !== alias)) {\n      window.location.href = alias\n    } else if (languageItems.length > 0) {\n      // Redirect if the stored language differs from the active language\n      if ((storedLanguage) && (document.documentElement.lang !== storedLanguage)) {\n        languageItems.forEach(item => {\n          if (item.getAttribute('hreflang') === storedLanguage) {\n            applyLanguage(storedLanguage, item.getAttribute('href'))\n          }\n        })\n      }\n\n      // Update the stored language when the user selects a new one\n      languageItems.forEach(item => {\n        item.addEventListener('click', () => {\n          const selectedLanguage = item.getAttribute('hreflang')\n\n          if (selectedLanguage) {\n            setLanguage(selectedLanguage)\n          }\n        })\n      })\n    }\n    else {\n      // overrule the current stored language when no translation is available\n      setLanguage(document.documentElement.lang)\n    }\n  })\n})()\n{{- end -}} \n/* eslint-enable */\n"
  },
  {
    "path": "assets/js/critical/sidebar-pre-init.js",
    "content": "// Pre-apply sidebar collapsed state before body renders to prevent label flash.\n(function () {\n  try {\n    if (localStorage.getItem('sidebar-collapsed') === '1') {\n      document.documentElement.classList.add('sidebar-pre-collapsed')\n    }\n  } catch { /* ignore localStorage errors */ }\n}())\n"
  },
  {
    "path": "assets/js/menu.js",
    "content": "const url = new URL(window.location.href)\nconst menu = url.searchParams.get('menu')\nconst child = url.searchParams.get('child')\nconst menuItems = document.querySelectorAll('[data-nav=\"main\"]')\n\nif (menu !== null) {\n  menuItems.forEach(element => {\n    element.classList.remove('active')\n  })\n\n  const targetMainItems = document.querySelectorAll(`[data-nav-main=\"${menu}\"]:not([data-nav-child])`)\n  targetMainItems.forEach(element => {\n    element.classList.add('active')\n  })\n\n  const targetChildItems = document.querySelectorAll(`[data-nav-main=\"${menu}\"][data-nav-child=\"${child}\"]`)\n  targetChildItems.forEach(element => {\n    element.classList.add('active')\n  })\n}\n"
  },
  {
    "path": "assets/js/modal.js",
    "content": "document.addEventListener('hide.bs.modal', function (_event) {\n  // Remove the focus from the active element\n  if (document.activeElement) {\n    document.activeElement.blur()\n  }\n})\n"
  },
  {
    "path": "assets/js/nav.js",
    "content": "function updateDropdown (element, id, label) {\n  const dropdown = document.getElementById(element)\n  if (dropdown != null) {\n    dropdown.querySelector('.dropdown-toggle').textContent = label\n    dropdown.querySelectorAll('.panel-dropdown .dropdown-item').forEach(item => {\n      item.classList.remove('active')\n      let target = item.getAttribute('data-link')\n      if (target != null) {\n        target = target.replace(/^#+/, '')\n        if (target === id) {\n          item.classList.add('active')\n        }\n      }\n    })\n  }\n}\n\ndocument.querySelectorAll('.panel-dropdown').forEach(trigger => {\n  trigger.addEventListener('hide.bs.dropdown', event => {\n    if (event.clickEvent != null) {\n      let target = event.clickEvent.srcElement.getAttribute('data-link')\n      if (target != null) {\n        trigger.querySelectorAll('.panel-dropdown .dropdown-item').forEach(item => {\n          item.classList.remove('active')\n        })\n        target = target.replace(/^#+/, '')\n        const btn = document.getElementById(target)\n        if (btn != null) {\n          event.clickEvent.srcElement.classList.add('active')\n          trigger.querySelector('.dropdown-toggle').textContent = event.clickEvent.srcElement.textContent\n          btn.click()\n        }\n      }\n    }\n  })\n})\n\ndocument.querySelectorAll('.nav-panel .nav-link').forEach(trigger => {\n  trigger.addEventListener('click', event => {\n    const companion = event.srcElement.parentElement.parentElement.getAttribute('data-companion')\n    if (companion != null) {\n      updateDropdown(companion, trigger.getAttribute('id'), trigger.textContent.trim())\n    }\n  })\n})\n"
  },
  {
    "path": "assets/js/navbar.js",
    "content": "const fixed = {{ site.Params.navigation.fixed }}\nconst navbar = document.querySelector('.navbar')\nconst togglers = document.querySelectorAll('.main-nav-toggler')\nconst modeSelectors = document.querySelectorAll('.switch-mode-collapsed')\nconst colorsBG = ['body', 'secondary', 'tertiary']\n\nlet scrollPosition = 0\n\nfunction sleep(ms) {\n  return new Promise(resolve => setTimeout(resolve, ms))\n}\n\nfunction getStyle(el, styleProp) {\n    let y\n    \n    if (window.getComputedStyle) {\n      y = document.defaultView.getComputedStyle(el).getPropertyValue(styleProp)\n    } else if (el.currentStyle) {\n      y = el.currentStyle[styleProp]\n    }\n\n    return y\n}\n\nfunction updateNavbarColor () {\n  const scrollTop = window.pageYOffset\n  const scrollBottom = scrollTop + navbar.offsetHeight\n\n  // find which section is currently under the navbar\n  let currentSection = null\n  const sections = document.querySelectorAll('article,section,footer')\n  let currentIndex = -1\n\n  sections.forEach(section => {\n    const rect = section.getBoundingClientRect()\n    const sectionTop = scrollTop + rect.top\n    const sectionBottom = sectionTop + section.offsetHeight - 1\n\n    // check if navbar overlaps with this section\n    if (scrollTop <= sectionBottom && scrollBottom >= sectionTop) {\n      let index = getStyle(section, 'z-index')\n      if (index === 'auto') {\n        index = 1\n      }\n      if (index > currentIndex) {\n        currentSection = section\n        currentIndex = index\n      }\n    }\n  })\n\n  // use main part as backup (defined in baseof.html template)\n  if (!currentSection) {\n    currentSection = document.querySelector('main')\n  }\n\n  if (currentSection) {\n    adaptToSection(currentSection)\n  }\n}\n\nfunction getBackgroundColor (section) {\n  // get computed background color of the section\n  let color = window.getComputedStyle(section).backgroundColor\n\n  // use body background when section background is undefined or transparent\n  if (color === 'rgba(0, 0, 0, 0)' || color === 'transparent') {\n    color = window.getComputedStyle(document.body).getPropertyValue('background-color')\n  }\n\n  return color\n}\n\nfunction adaptToSection (section) {\n  // retrieve the section background color, using body color as fallback\n  const color = getBackgroundColor(section)\n\n  // determine if the background is light or dark\n  const isLightBackground = isLightColor(section, color)\n\n  // set appropriate mode class\n  const nav = document.querySelector('.navbar')\n  if (isLightBackground) {\n    if (navbar.dataset.bsTheme !== 'light') {\n      navbar.dataset.bsTheme = 'light'\n    }\n  } else {\n    if (navbar.dataset.bsTheme !== 'dark') {\n      navbar.dataset.bsTheme = 'dark'\n    }\n  }\n\n  // update semi-transparent background color of navbar\n  const rgb = parseRGB(color)\n  if (rgb) {\n    navbar.style.backgroundColor = `rgba(${rgb.r},${rgb.g},${rgb.b},.4)`\n  }\n}\n\nfunction isLightColor (section, color) {\n  if (section.dataset.bsTheme === 'light') {\n    return true\n  }\n\n  if (section.dataset.bsTheme === 'dark') {\n    return false\n  }\n\n  // parse RGB color of the section backgroiund\n  const rgb = parseRGB(color)\n  if (!rgb) return true // Default to light if can't parse\n\n  // calculate relative luminance\n  const luminance = calculateLuminance(rgb.r, rgb.g, rgb.b)\n\n  // return true if light (luminance > 0.5)\n  return luminance > 0.5\n}\n\nfunction parseRGB (color) {\n  const match = color.match(/rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)/)\n  if (match) {\n    return {\n      r: parseInt(match[1]),\n      g: parseInt(match[2]),\n      b: parseInt(match[3])\n    }\n  }\n  return null\n}\n\nfunction calculateLuminance (r, g, b) {\n  // convert RGB to relative luminance using sRGB formula\n  const [rs, gs, bs] = [r, g, b].map(c => {\n    c = c / 255\n    return c <= 0.03928 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4)\n  })\n\n  return 0.2126 * rs + 0.7152 * gs + 0.0722 * bs\n}\n\nfunction updateNavbar () {\n  if (navbar.dataset.transparent) {\n    if (window.scrollY > 0) {\n      navbar.classList.add('navbar-scrolled')\n    } else {\n      navbar.classList.remove('navbar-scrolled')\n    }\n    updateNavbarColor()\n    if (window.scrollY === 0) {\n      navbar.style.backgroundColor = ''\n    }\n  } else {\n    let storedTheme\n    if (typeof getLocalStorage === \"function\") {\n      storedTheme = getLocalStorage('theme', null, 'functional')\n    }\n\n    if (window.scrollY > 75) {\n      navbar.classList.add('nav-active')\n      if (storedTheme) {\n        navbar.setAttribute('data-bs-theme', storedTheme)\n      }\n    } else {\n      navbar.classList.remove('nav-active')\n      const defaultTheme = navbar.getAttribute('data-bs-overlay')\n\n      const targetTheme = defaultTheme ? defaultTheme : storedTheme\n      if (targetTheme) {\n        navbar.setAttribute('data-bs-theme', defaultTheme)\n      }\n    }\n  }\n}\n\nif ((navbar !== null) && (window.performance.getEntriesByType)) {\n  if (window.performance.getEntriesByType('navigation')[0].type === 'reload') {\n    fixed && updateNavbar()\n  }\n}\n\nif (navbar !== null && togglers !== null) {\n  // initialize and update the navbar on load, on resize, and on scroll\n  document.addEventListener('DOMContentLoaded', () => { fixed && updateNavbar() })\n  window.addEventListener('resize', () => {\n    fixed && updateNavbar()\n    for (let i = 0; i < togglers.length; ++i) {\n      const toggler = togglers[i]\n      if (toggler.getAttribute('aria-expanded') === 'true') {\n        toggler.click()\n      }\n    }\n  })\n  document.addEventListener('scroll', () => fixed && updateNavbar())\n\n  // hook up collapse events\n  document.querySelectorAll('.navbar-collapse').forEach((collapse) => {\n    collapse.addEventListener('show.bs.collapse', function () {\n      scrollPosition = window.pageYOffset\n      document.body.style.top = `-${scrollPosition}px`\n      document.body.classList.add('navbar-open')\n    })\n    collapse.addEventListener('hide.bs.collapse', function () {\n      document.body.classList.remove('navbar-open')\n      document.body.style.top = ''\n      window.scrollTo({ top: scrollPosition, behavior: 'instant' })\n    })\n  })\n\n  // observe state changes to the site's color mode\n  const html = document.querySelector('html')\n  const config = {\n    attributes: true,\n    attributeFilter: ['data-bs-theme']\n  }\n  const Observer = new MutationObserver(() => {\n    if (fixed) {\n      // wait for the theme animation to finish\n      sleep(600).then(() => { \n        updateNavbar() \n      })\n    }\n  })\n  Observer.observe(html, config)\n\n  // initialize background color\n  if (!navbar.dataset.transparent) {\n    const color = (navbar.getAttribute('data-navbar-color') || 'body')\n    const bg = colorsBG.includes(color) ? `var(--bs-${color}-bg)` : `var(--bs-navbar-color-${color})`\n    navbar.style.setProperty('--bs-navbar-expanded-color', bg)\n  }\n\n  // update the navbar background color when expanded\n  for (let i = 0; i < togglers.length; ++i) {\n    togglers[i].onclick = () => {\n      navbar.classList.toggle('navbar-expanded')\n    }\n  }\n\n  // invoke the navbar toggler for each mode switcher to collapse the main menu afterwards\n  for (let i = 0; i < modeSelectors.length; ++i) {\n    modeSelectors[i].onclick = () => {\n      for (let j = 0; j < togglers.length; ++j) {\n        const toggler = togglers[j]\n        if (toggler.getAttribute('aria-expanded') === 'true') {\n          toggler.click()\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "assets/js/optional/.gitkeep",
    "content": ""
  },
  {
    "path": "assets/js/popover.js",
    "content": "const popoverTriggerList = document.querySelectorAll('[data-bs-toggle=\"popover\"]')\n// eslint-disable-next-line no-undef, no-unused-vars\nconst popoverList = [...popoverTriggerList].map(popoverTriggerEl => new bootstrap.Popover(popoverTriggerEl))\n"
  },
  {
    "path": "assets/js/sharing.js",
    "content": "{{- if site.Params.sharing.webshare -}}\n\n// Adapted from: https://dev.to/j471n/how-to-share-anything-from-your-website-by-web-share-api-1h5g\n\n// function for Web Share API\nfunction webShareAPI (title, description, link) {\n  navigator\n    .share({\n      title,\n      text: description,\n      url: link\n    })\n    .then(() => console.log('Successful share'))\n    .catch((error) => console.log('Error sharing', error))\n}\n\nconst shareButtons = document.querySelectorAll('[data-sharing-url]')\nshareButtons.forEach(btn => {\n  if (navigator.share) {\n    const title = btn.getAttribute('data-sharing-title')\n    const description = btn.getAttribute('data-sharing-description')\n    const url = btn.getAttribute('data-sharing-url')\n\n    // show button if it supports webShareAPI\n    btn.style.display = 'block'\n    btn.addEventListener('click', () =>\n      webShareAPI(title, description, url)\n    )\n  } else {\n    // hide button if host does not support Web Share API\n    btn.style.display = 'none'\n  }\n})\n\n{{- end -}}"
  },
  {
    "path": "assets/js/sidebar-group.js",
    "content": "(function () {\n  'use strict'\n\n  var STORAGE_KEY = 'sidebar-secondary-collapsed'\n\n  function init () {\n    var nav = document.querySelector('.sidebar-collapsible')\n    if (!nav) return\n    var btn = nav.querySelector('[data-bs-toggle=\"collapse\"][data-bs-target^=\"#sidebar-secondary-\"]')\n    if (!btn) return\n    var target = document.querySelector(btn.getAttribute('data-bs-target'))\n    if (!target) return\n\n    // Restore persisted state — default is collapsed (stored = true)\n    var stored = true\n    try {\n      var v = localStorage.getItem(STORAGE_KEY)\n      if (v !== null) stored = v === '1'\n    } catch { /* ignore localStorage errors */ }\n\n    if (!stored) {\n      target.classList.add('show')\n      btn.setAttribute('aria-expanded', 'true')\n    }\n\n    target.addEventListener('show.bs.collapse', function () {\n      btn.setAttribute('aria-expanded', 'true')\n      try { localStorage.setItem(STORAGE_KEY, '0') } catch { /* ignore localStorage errors */ }\n    })\n    target.addEventListener('hide.bs.collapse', function () {\n      btn.setAttribute('aria-expanded', 'false')\n      try { localStorage.setItem(STORAGE_KEY, '1') } catch { /* ignore localStorage errors */ }\n    })\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', init)\n  } else {\n    init()\n  }\n}())\n"
  },
  {
    "path": "assets/js/sidebar-toggle.js",
    "content": "(function () {\n  'use strict'\n\n  function setCollapsed (nav, collapsed) {\n    var storageKey = nav.getAttribute('data-storage-key') || 'sidebar-collapsed'\n    nav.classList.toggle('sidebar-collapsed', collapsed)\n    var btn = nav.querySelector('.sidebar-toggle-btn')\n    if (btn) btn.setAttribute('aria-expanded', String(!collapsed))\n\n    if (typeof bootstrap !== 'undefined') {\n      var items = nav.querySelectorAll('[data-sidebar-label]')\n      if (collapsed) {\n        items.forEach(function (el) {\n          el.setAttribute('data-bs-toggle', 'tooltip')\n          el.setAttribute('data-bs-placement', 'right')\n          el.setAttribute('title', el.getAttribute('data-sidebar-label'))\n          if (!bootstrap.Tooltip.getInstance(el)) {\n            new bootstrap.Tooltip(el)\n          }\n        })\n      } else {\n        items.forEach(function (el) {\n          var tt = bootstrap.Tooltip.getInstance(el)\n          if (tt) tt.dispose()\n          el.removeAttribute('data-bs-toggle')\n          el.removeAttribute('data-bs-placement')\n          el.removeAttribute('title')\n        })\n      }\n    }\n\n    try { localStorage.setItem(storageKey, collapsed ? '1' : '0') } catch { /* ignore localStorage errors */ }\n\n    nav.dispatchEvent(new CustomEvent('hinode:sidebar-toggle', {\n      bubbles: true,\n      detail: { collapsed: collapsed }\n    }))\n  }\n\n  function init () {\n    var nav = document.querySelector('.sidebar-collapsible')\n    if (!nav) return\n\n    var btn = nav.querySelector('.sidebar-toggle-btn')\n    if (!btn) return\n\n    var storageKey = nav.getAttribute('data-storage-key') || 'sidebar-collapsed'\n    var stored = false\n    try { stored = localStorage.getItem(storageKey) === '1' } catch { /* ignore localStorage errors */ }\n    nav.classList.add('sidebar-no-transition')\n    setCollapsed(nav, stored)\n    document.documentElement.classList.remove('sidebar-pre-collapsed')\n    nav.offsetHeight // force reflow before re-enabling transitions\n    nav.classList.remove('sidebar-no-transition')\n\n    btn.addEventListener('click', function () {\n      setCollapsed(nav, !nav.classList.contains('sidebar-collapsed'))\n    })\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', init)\n  } else {\n    init()\n  }\n}())\n"
  },
  {
    "path": "assets/js/testimonial.js",
    "content": "function adjustCarouselHeight () {\n  let max = 0\n  document.querySelectorAll('.testimonials .carousel-item').forEach(container => {\n    const clone = container.cloneNode(true)\n    clone.style.display = 'block'\n    clone.style.visibility = 'hidden'\n    clone.style.height = 'auto'\n    container.parentNode.appendChild(clone)\n    if (clone.offsetHeight > max) max = clone.offsetHeight\n    container.parentNode.removeChild(clone)\n  })\n\n  document.querySelectorAll('.testimonials .carousel-item').forEach(container => {\n    container.style.height = max + 'px'\n  })\n}\n\nwindow.addEventListener('load', () => { adjustCarouselHeight() })\nwindow.addEventListener('resize', () => { adjustCarouselHeight() })\n"
  },
  {
    "path": "assets/js/toast.js",
    "content": "// Script to move all embedded toast messages into a container with id 'toast-container'. The container ensures multiple\n// toast messages are stacked properly. The script targets all elements specified by a 'data-toast-target' and ensures\n// the click event of the origin is linked as well.\n\nconst container = document.getElementById('toast-container')\nif (container !== null) {\n  // process all data-toast-target elements\n  document.querySelectorAll('[data-toast-target]').forEach(trigger => {\n    const target = document.getElementById(trigger.getAttribute('data-toast-target'))\n    if (target !== null) {\n      // move the element to the toast containr\n      container.appendChild(target)\n\n      // eslint-disable-next-line no-undef\n      const toast = bootstrap.Toast.getOrCreateInstance(target)\n      if (toast !== null) {\n        // associate the click event of the origin with the toast element\n        trigger.addEventListener('click', () => {\n          toast.show()\n        })\n      }\n    }\n  })\n}\n"
  },
  {
    "path": "assets/js/toc.js",
    "content": "const btnTOCShowMore = document.getElementById('btnTOCShowMore')\nif (btnTOCShowMore !== null) {\n  btnTOCShowMore.addEventListener('click', _e => {\n    btnTOCShowMore.style.display = 'none'\n  })\n}\n\nconst btnTOCShowLess = document.getElementById('btnTOCShowLess')\nif ((btnTOCShowLess !== null) && (btnTOCShowMore !== null)) {\n  btnTOCShowLess.addEventListener('click', _e => {\n    btnTOCShowMore.style.display = 'initial'\n  })\n}\n"
  },
  {
    "path": "assets/js/tooltip.js",
    "content": "// Bootstrap tooltip example: https://getbootstrap.com/docs/5.2/components/tooltips/\nconst tooltipTriggerList = document.querySelectorAll('[data-bs-toggle=\"tooltip\"]')\n// eslint-disable-next-line no-unused-vars, no-undef\nconst tooltipList = [...tooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl))\n"
  },
  {
    "path": "assets/js/vendor/.gitkeep",
    "content": ""
  },
  {
    "path": "assets/js/video.js",
    "content": "document.querySelectorAll('[data-video-padding]').forEach(element => {\n  element.style.paddingBottom = element.getAttribute('data-video-padding')\n})\n"
  },
  {
    "path": "assets/scss/app-dart.scss",
    "content": "@use \"sass:meta\";\n\n// Define template variables\n@use \"hugo:vars\" as h; // note: modified for dart-sass\n\n// Include default variable overrides\n@import \"common/variables-dart.scss\"; // note: modified for dart-sass\n@import \"theme/variables.scss\";\n@import \"common/icons.scss\";\n\n// Import custom utilities (must be before Bootstrap)\n@import \"common/utilities-custom.scss\";\n\n// Import Bootstrap configuration (mounted by core Bootstrap module)\n@import \"bootstrap-dart.scss\"; // note: modified for dart-sass\n\n// Import responsive utilities (requires Bootstrap variables to be defined)\n@import \"common/utilities-responsive.scss\";\n\n// Include dark mode overrides\n@import \"common/variables-dark.scss\";\n\n// Import Hinode theme styles\n@import \"components/abbr.scss\";\n@import \"components/alert.scss\";\n@import \"components/blockquote.scss\";\n@import \"components/button.scss\";\n@import \"components/card.scss\";\n@import \"components/carousel.scss\";\n@import \"components/clipboard.scss\";\n@import \"components/command.scss\";\n@import \"components/docs.scss\";\n@import \"components/feature.scss\";\n@import \"components/footer.scss\";\n@import \"components/kbd.scss\";\n@import \"components/nav.scss\";\n@import \"components/navbar.scss\";\n@import \"components/img.scss\";\n@import \"components/pagination.scss\";\n@import \"components/persona.scss\";\n@import \"components/popover.scss\";\n@import \"components/sidebar.scss\";\n@import \"components/syntax-dart.scss\"; // note: modified for dart-sass\n@import \"components/table.scss\";\n@import \"components/testimonial.scss\";\n@import \"components/toast.scss\";\n@import \"components/timeline.scss\";\n@import \"components/toc.scss\";\n@import \"components/tooltip.scss\";\n@import \"components/video.scss\";\n@import \"common/animation.scss\";\n@import \"common/masonry.scss\";\n@import \"common/scrollbar.scss\";\n@import \"common/styles.scss\";\n@import \"layouts/reboot.scss\";\n@import \"layouts/type.scss\";\n@import \"common/export.scss\";\n@import \"helpers/colored-links.scss\";\n@import \"helpers/display.scss\";\n\n// note: modified for dart-sass\n@if h.$import-fonts {\n    @include meta.load-css(theme/fonts);\n}\n\n// Import theme placeholders\n@import \"theme/base.scss\";\n@import \"theme/theme.scss\";\n\n// Import Bootstrap utilities API (mounted by core Bootstrap module)\n@import \"modules/bootstrap/utilities/api\";\n"
  },
  {
    "path": "assets/scss/app.scss",
    "content": "// Define template variables\n@import \"hugo:vars\";\n\n// Include default variable overrides\n@import \"common/variables.scss\";\n@import \"theme/variables.scss\";\n@import \"common/icons.scss\";\n\n// Import custom utilities (must be before Bootstrap)\n@import \"common/utilities-custom.scss\";\n\n// Import Bootstrap configuration (mounted by core Bootstrap module)\n@import \"bootstrap.scss\";\n\n// Import responsive utilities (requires Bootstrap variables to be defined)\n@import \"common/utilities-responsive.scss\";\n\n// Include dark mode overrides\n@import \"common/variables-dark.scss\";\n\n// Import Hinode theme styles\n@import \"components/abbr.scss\";\n@import \"components/alert.scss\";\n@import \"components/blockquote.scss\";\n@import \"components/button.scss\";\n@import \"components/card.scss\";\n@import \"components/carousel.scss\";\n@import \"components/clipboard.scss\";\n@import \"components/command.scss\";\n@import \"components/docs.scss\";\n@import \"components/feature.scss\";\n@import \"components/footer.scss\";\n@import \"components/kbd.scss\";\n@import \"components/nav.scss\";\n@import \"components/navbar.scss\";\n@import \"components/img.scss\";\n@import \"components/pagination.scss\";\n@import \"components/persona.scss\";\n@import \"components/popover.scss\";\n@import \"components/sidebar.scss\";\n@import \"components/syntax.scss\";\n@import \"components/table.scss\";\n@import \"components/testimonial.scss\";\n@import \"components/toast.scss\";\n@import \"components/timeline.scss\";\n@import \"components/toc.scss\";\n@import \"components/tooltip.scss\";\n@import \"components/video.scss\";\n@import \"common/animation.scss\";\n@import \"common/masonry.scss\";\n@import \"common/scrollbar.scss\";\n@import \"common/styles.scss\";\n@import \"layouts/reboot.scss\";\n@import \"layouts/type.scss\";\n@import \"common/export.scss\";\n@import \"helpers/colored-links.scss\";\n@import \"helpers/display.scss\";\n\n{{ if (not (hasPrefix (lower site.Params.style.themeFontPath) \"http\")) }}\n    @import \"theme/fonts.scss\";\n{{ end }}\n\n// Import theme placeholders\n@import \"theme/base.scss\";\n@import \"theme/theme.scss\";\n\n// Import Bootstrap utilities API (mounted by core Bootstrap module)\n@import \"modules/bootstrap/utilities/api\";\n"
  },
  {
    "path": "assets/scss/common/_animation.scss",
    "content": ".rotate-5 {\n    transform: rotate(5deg);\n}\n\n.rotate-n5 {\n    transform: rotate(-5deg);\n}\n\n@media (prefers-reduced-motion: no-preference) {\n    .reveal {\n        position: relative;\n        opacity: 0;\n        animation-iteration-count: 1;\n    }\n\n    .reveal.active {\n        opacity: 1;\n    }\n\n    .active.fade-bottom {\n        animation: fade-bottom 1s ease-in;\n    }\n\n    .active.fade-bottom-5 {\n        animation: fade-bottom-5 1s ease-in;\n    }\n    \n    .active.fade-bottom-n5 {\n        animation: fade-bottom-n5 1s ease-in;\n    }\n    \n    .active.fade-left {\n        animation: fade-left 1s ease-in;\n    }\n    \n    .active.fade-right {\n        animation: fade-right 1s ease-in;\n    }\n\n    @keyframes fade-bottom {\n        0% {\n            transform: translateY(50px);\n            opacity: 0;\n        }\n\n        100% {\n            transform: translateY(0);\n            opacity: 1;\n        }\n    }\n    \n    @keyframes fade-bottom-5 {\n        0% {\n            transform: translateY(50px) rotate(5deg);\n            opacity: 0;\n        }\n\n        100% {\n            transform: translateY(0) rotate(5deg);\n            opacity: 1;\n        }\n    }\n\n    @keyframes fade-bottom-n5 {\n        0% {\n            transform: translateY(50px) rotate(-5deg);\n            opacity: 0;\n        }\n\n        100% {\n            transform: translateY(0) rotate(-5deg);\n            opacity: 1;\n        }\n    }\n    \n    @keyframes fade-left {\n        0% {\n            transform: translateX(-100px);\n            opacity: 0;\n        }\n\n        100% {\n            transform: translateX(0);\n            opacity: 1;\n        }\n    }\n\n    @keyframes fade-right {\n        0% {\n            transform: translateX(100px);\n            opacity: 0;\n        }\n        \n        100% {\n            transform: translateX(0);\n            opacity: 1;\n        }\n    }\n}\n"
  },
  {
    "path": "assets/scss/common/_export.scss",
    "content": "// stylelint-disable selector-pseudo-class-no-unknown\n\n// scss-docs-start export\n:hinode-theme {\n    --accordion-icon-active-color: #{$accordion-icon-active-color};\n    --accordion-icon-active-color-dark: #{$gray-300};\n    --accordion-icon-color: #{$accordion-icon-color};\n    --accordion-icon-color-dark: #{$gray-600};\n    --btn-close-color: #{$btn-close-color};\n    --btn-toggle-color: #{$btn-toggle-color};\n    --btn-toggle-color-dark: #{$gray-600};\n    --carousel-control-color: #{$carousel-control-color};\n    --form-check-input-checked-color: #{$form-check-input-checked-color};\n    --form-check-input-indeterminate-color: #{$form-check-input-indeterminate-color};\n    --form-feedback-icon-invalid-color: #{$form-feedback-icon-invalid-color};\n    --form-feedback-icon-valid-color: #{$form-feedback-icon-valid-color};\n    --form-select-indicator-color: #{$form-select-indicator-color};\n    --form-select-indicator-color-dark: #{$form-select-indicator-color-dark};\n    --form-switch-checked-color: #{$form-switch-checked-color};\n    --form-switch-color: #{$form-switch-color};\n    --form-switch-color-dark: #{$form-switch-color-dark};\n    --form-switch-focus-color: #{$form-switch-focus-color};\n    --navbar-dark-color: #{$navbar-dark-color};\n    --navbar-light-icon-color: rgba($body-color, 0.75); // TODO: See https://github.com/twbs/bootstrap/pull/37720\n}\n\n// scss-docs-end export\n// stylelint-enable selector-pseudo-class-no-unknown\n"
  },
  {
    "path": "assets/scss/common/_icons.scss",
    "content": "// scss-docs-start icons\n$form-check-input-checked-bg-image:             url(\"#{$base-url}icons/form-check-input-checked-bg-image.svg\") !default;\n$form-check-radio-checked-bg-image:             url(\"#{$base-url}icons/form-check-radio-checked-bg-image.svg\") !default;\n$form-check-input-indeterminate-bg-image:       url(\"#{$base-url}icons/form-check-input-indeterminate-bg-image.svg\") !default;\n$form-switch-bg-image:                          url(\"#{$base-url}icons/form-switch-bg-image.svg\") !default;\n$form-switch-bg-image-dark:                     url(\"#{$base-url}icons/form-switch-bg-image-dark.svg\") !default;\n$form-switch-focus-bg-image:                    url(\"#{$base-url}icons/form-switch-focus-bg-image.svg\") !default;\n$form-switch-checked-bg-image:                  url(\"#{$base-url}icons/form-switch-checked-bg-image.svg\") !default;\n$form-select-indicator:                         url(\"#{$base-url}icons/form-select-indicator.svg\") !default;\n$form-select-indicator-dark:                    url(\"#{$base-url}icons/form-select-indicator-dark.svg\") !default;\n$form-feedback-icon-valid:                      url(\"#{$base-url}icons/form-feedback-icon-valid.svg\") !default;\n$form-feedback-icon-invalid:                    url(\"#{$base-url}icons/form-feedback-icon-invalid.svg\") !default;\n$navbar-light-toggler-icon-bg:                  url(\"#{$base-url}icons/navbar-light-toggler-icon-bg.svg\") !default;\n$navbar-dark-toggler-icon-bg:                   url(\"#{$base-url}icons/navbar-dark-toggler-icon-bg.svg\") !default;\n$accordion-button-icon:                         url(\"#{$base-url}icons/accordion-button-icon.svg\") !default;\n$accordion-button-icon-dark:                    url(\"#{$base-url}icons/accordion-button-icon-dark.svg\") !default;\n$accordion-button-active-icon:                  url(\"#{$base-url}icons/accordion-button-active-icon.svg\") !default;\n$accordion-button-active-icon-dark:             url(\"#{$base-url}icons/accordion-button-active-icon-dark.svg\") !default;\n$carousel-control-prev-icon-bg:                 url(\"#{$base-url}icons/carousel-control-prev-icon-bg.svg\") !default;\n$carousel-control-next-icon-bg:                 url(\"#{$base-url}icons/carousel-control-next-icon-bg.svg\") !default;\n$btn-close-bg:                                  url(\"#{$base-url}icons/btn-close-bg.svg\") !default;\n$btn-toggle:                                    url(\"#{$base-url}icons/btn-toggle.svg\") !default;\n$btn-toggle-dark:                               url(\"#{$base-url}icons/btn-toggle-dark.svg\") !default;\n\n// scss-docs-end icons\n"
  },
  {
    "path": "assets/scss/common/_masonry.scss",
    "content": ".masonry {\n    --masonry-padding: 4px;\n}\n\n.m-row {\n    display: flex;\n    flex-wrap: wrap;\n    padding: 0 var(--masonry-padding);\n}\n\n.m-col {\n    flex: 100%;\n    max-width: 100%;\n    padding: 0 var(--masonry-padding);\n}\n\n.m-col div {\n    margin-top: calc(2 * var(--masonry-padding));\n    border-radius: #{$theme-border-radius} if($enable-important-utilities, !important, null);\n}\n"
  },
  {
    "path": "assets/scss/common/_scrollbar.scss",
    "content": "@mixin scrollbar(\n  $foreground-color: var(--bs-primary),\n  $background-color: var(--bs-tertiary-bg),\n  $size: 10px\n) {\n\t// For Safari and Chrome (to force appearance in Chrome)\n\t&::-webkit-scrollbar {\n\t\twidth: $size;\n\t\theight: $size;\n\t}\n\n\t&::-webkit-scrollbar-thumb {\n\t\tborder-radius: calc($size / 2);\n\t\tbackground: $foreground-color;\n\t}\n\n\t&::-webkit-scrollbar-track {\n\t\tborder-radius: calc($size / 2);\n\t\tbackground: $background-color;\n\t}\n\n\t// Standard version (Firefox, only appears on scroll)\n\t@supports (-moz-appearance:none) {\n\t\t/* stylelint-disable-next-line no-invalid-position-declaration */\n\t\tscrollbar-color: $foreground-color $background-color;\n\t}\n}\n\n.scrollbar-horizontal\n{\n    @include scrollbar;\n\n\toverflow-x: scroll;\n\tmargin: auto;\n}\n"
  },
  {
    "path": "assets/scss/common/_styles.scss",
    "content": "@if $enable-dark-mode {\n    [data-bs-theme-animate=\"true\"] body { \n        transition: background-color 0.5s, color 0.5s; \n    }\n}\n\n//\n// Remove underline from all links\n//\na:link,\na:visited,\na:hover,\na:active {\n    text-decoration: none;\n}\n\ndiv.rounded, img.rounded {\n    --bs-border-radius: #{$theme-border-radius};\n}\n\n//\n// Sticky-footer: body fills at least the full viewport; .main grows to fill\n// remaining space, pushing the footer to the bottom without JS measurement.\n//\nbody {\n    display: flex;\n    flex-direction: column;\n    min-height: 100dvh;\n}\n\n//\n// Ensure main page is rendered to full viewport height\n//\n.main {\n    --navbar-height: #{$navbar-height};\n    --overlay-offset: #{$overlay-offset};\n    --section-height: 88vh;\n    --max-section-height: 1024px;\n\n    flex: 1;\n}\n\n// Fixed navbar is out of flow: offset .main so content starts below the navbar\n.navbar-fixed .main {\n    margin-top: var(--navbar-offset);\n}\n\n// footerBelowFold: push footer just past the viewport edge.\n// Fixed (--navbar-offset = navbar height): margin-top = --navbar-offset, so subtract once.\n// Non-fixed (--navbar-offset = 0): navbar is in flow; subtract --navbar-height (actual height,\n//   always set from site.Params.navigation.offset regardless of the fixed setting).\n.navbar-fixed.footer-below-fold .main {\n    min-height: calc(100vh - var(--navbar-offset));\n}\n\n.footer-below-fold:not(.navbar-fixed) .main {\n    min-height: calc(100vh - var(--navbar-height));\n}\n\nmain:has(section:first-of-type.section-cover), main:has(section:first-of-type.background-container) {\n    margin-top: var(--overlay-offset);\n}\n\n.overlay-spacer {\n    padding-top: var(--navbar-height);\n}\n\n.tickmark li::marker {\n    content: \"✓ \";\n}\n\n.anchor\n{\n    color: transparent;\n}\n\n.heading:hover .anchor\n{\n    transition: 0.25s ease-in-out;\n    color: $primary;\n}\n\n:root {\n    --nav-height: 90px;\n}\n\n.section-cover {\n    min-height: calc(var(--section-height) - var(--overlay-offset));\n}\n\n.hero-title {\n    width: 100%;\n}\n\n@include media-breakpoint-up(xxl) {\n    .section-cover {\n        min-height: calc(min(calc(var(--section-height) - var(--overlay-offset)), var(--max-section-height)));\n    }    \n}\n\n/* stylelint-disable media-feature-range-notation */\n@media (min-height: 1400px) { \n    .section-cover {\n        min-height: calc(min(calc(var(--section-height) - var(--overlay-offset)), var(--max-section-height)));\n    }\n}\n/* stylelint-enable media-feature-range-notation */\n\n.width-100 {\n    width: 100%;\n}\n"
  },
  {
    "path": "assets/scss/common/_utilities-custom.scss",
    "content": "// Custom Bootstrap utilities extensions\n// This file must be imported BEFORE bootstrap.scss to ensure utilities are processed\n\n// Initialize utilities map if not already defined\n$utilities: () !default;\n\n// Add custom masonry column utilities\n$utilities: map-merge(\n    $utilities,\n    (\n        \"m-col\": (\n            property: max-width,\n            responsive: true,\n            class: m-col,\n            values: (\n                1: 100%,\n                2: 50%,\n                3: 33.3%,\n                4: 25%,\n                5: 20%,\n            )\n        )\n    )\n);\n\n// Add custom margin utilities (mx auto/0)\n$utilities: map-merge(\n    $utilities,\n    (\n        \"cursor\": (\n            property: margin-left margin-right,\n            class: mx,\n            responsive: true,\n            values: auto 0,\n        )\n    )\n);\n\n// Add wide padding utilities (using hardcoded rem values since $spacer not yet available)\n$utilities: map-merge(\n    $utilities,\n    (\n        \"padding-start-wide\": (\n            property: padding-left,\n            responsive: true,\n            class: psw,\n            values: (\n                0: 0,\n                1: 1.5rem,\n                2: 3rem,\n                3: 6rem,\n                4: 9rem,\n                5: 12rem,\n            )\n        ),\n        \"padding-top-wide\": (\n            property: padding-top,\n            responsive: true,\n            class: ptw,\n            values: (\n                0: 0,\n                1: 1.5rem,\n                2: 3rem,\n                3: 6rem,\n                4: 9rem,\n                5: 12rem,\n            )\n        ),\n        \"width\": (\n            property: width,\n            responsive: true,\n            values: (\n                auto: auto\n            )\n        )\n    )\n);\n"
  },
  {
    "path": "assets/scss/common/_utilities-responsive.scss",
    "content": "// Responsive utilities that require Bootstrap variables to be defined\n// Must be imported AFTER bootstrap.scss\n\n// Make the font-size class responsive (requires $font-sizes from Bootstrap)\n$utilities: map-merge(\n  $utilities,\n  (\n    \"font-size\": (\n      responsive: true,\n      rfs: true,\n      property: font-size,\n      class: fs,\n      values: $font-sizes\n    ),\n  )\n);\n"
  },
  {
    "path": "assets/scss/common/_variables-dark.scss",
    "content": "@if $enable-dark-mode {\n    @include color-mode(dark) {\n        --bs-primary: #{$primary-text-emphasis-dark};\n        --bs-secondary: #{$secondary-text-emphasis-dark};\n        --bs-primary-dark: #{$primary-bg-subtle-dark};\n        --bs-primary-bg-subtle: #{$primary-bg-subtle-dark};\n        --bg-primary-subtle: rgba(var(--bs-primary-rgb), var(--bs-link-opacity, 0.1));\n        --bs-body: var(--bs-body-bg);\n        --bs-body-tertiary: var(--bs-tertiary-bg);\n\n        .bg-primary-subtle {\n            background-color: var(--bg-primary-subtle) if($enable-important-utilities, !important, null);\n        }        \n        \n        .accordion-button {\n            background-color: var(--bg-primary-subtle);\n        }\n\n        .dropdown-item {\n          --bs-dropdown-link-hover-bg: var(--bs-tertiary-bg);\n        }\n\n        .form-check-input:checked {\n          background-color: var(--bs-primary);\n          border-color: var(--bs-primary); }\n        \n        .form-check-input[type=\"checkbox\"]:indeterminate {\n          background-color: var(--bs-primary);\n          border-color: var(--bs-primary);\n         }\n        \n        .form-range::-webkit-slider-thumb {\n          background-color: var(--bs-primary);\n        }\n        \n        .form-range::-moz-range-thumb {\n          background-color: var(--bs-primary);\n        }\n\n        .alert-primary {\n          --bs-alert-bg: var(--bg-primary-subtle);\n        }\n        \n        .btn-outline-primary {\n          --bs-btn-color: var(--bs-primary);\n          --bs-btn-border-color: var(--bs-primary);\n          --bs-btn-hover-bg: var(--bs-primary);\n          --bs-btn-hover-border-color: var(--bs-primary);\n          --bs-btn-active-bg: var(--bs-primary);\n          --bs-btn-active-border-color: var(--bs-primary);\n          --bs-btn-disabled-color: var(--bs-primary);\n          --bs-btn-disabled-border-color: var(--bs-primary);\n        }\n        \n        .btn-outline-secondary {\n          --bs-btn-color: var(--bs-secondary);\n          --bs-btn-border-color: var(--bs-secondary);\n          --bs-btn-hover-bg: var(--bs-secondary);\n          --bs-btn-hover-border-color: var(--bs-secondary);\n          --bs-btn-active-bg: var(--bs-secondary);\n          --bs-btn-active-border-color: var(--bs-secondary);\n          --bs-btn-disabled-color: var(--bs-secondary);\n          --bs-btn-disabled-border-color: var(--bs-secondary);\n        }\n\n        .link-primary {\n          color: var(--bs-primary) if($enable-important-utilities, !important, null);\n          text-decoration-color: var(--bs-primary) if($enable-important-utilities, !important, null);\n          \n          &:hover,\n          &:focus {\n            color: var(--bs-primary-dark) if($enable-important-utilities, !important, null);\n            text-decoration-color: var(--bs-primary-dark) if($enable-important-utilities, !important, null);              \n          }\n        }\n\n        .pagination {\n          --bs-pagination-color: var(--bs-body-bg);\n          --bs-pagination-bg: var(--bs-primary);\n        }\n        \n        .progress,\n        .progress-stacked {\n          --bs-progress-bar-bg: var(--bs-primary);\n        }\n        \n        .list-group {\n          --bs-list-group-active-bg: var(--bs-primary);\n          --bs-list-group-active-border-color: var(--bs-primary);\n         }\n        \n        .clipboard-button:hover {\n          color: var(--bs-primary); }\n        \n        .clipboard-button:hover > svg {\n          fill: var(--bs-primary);\n        }\n        \n        .toggler-icon {\n          background-color: var(--bs-primary);\n        }\n        \n        .heading:hover .anchor {\n          color: var(--bs-primary); \n        }\n    }\n}\n"
  },
  {
    "path": "assets/scss/common/_variables-dart.scss",
    "content": "// Bootstrap variables overrides for theme\n$enable-negative-margins:       true;\n$enable-important-utilities:    true !default;\n\n// Remove the border from the focused navigation toggler\n$navbar-toggler-focus-width:    0 !default;\n\n$base-url:                      h.$base-url;\n\n$font-family-sans-serif:        h.$theme-font, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\" !default;\n$font-size-base:                h.$font-size-base !default;\n$headings-font-weight:          600 !default;\n$font-weight-lighter:           lighter !default;\n$font-weight-light:             200 !default;\n$font-weight-normal:            300 !default;\n$font-weight-bold:              600 !default;\n$font-weight-bolder:            bolder !default;\n\nstrong {\n    font-weight:                600 if($enable-important-utilities, !important, null);\n}\n\n$theme-border-radius:           0.375rem;\n\n$navbar-height:                 h.$navbar-height;\n$navbar-offset:                 h.$navbar-offset;\n$navbar-offset-xs:              h.$navbar-offset-xs;\n$navbar-size:                   h.$navbar-size;\n$overlay-offset:                h.$overlay-offset;\n$primary:                       h.$primary;\n$secondary:                     h.$secondary;\n$success:                       h.$success;\n$info:                          h.$info;\n$warning:                       h.$warning;\n$danger:                        h.$danger;\n$light:                         h.$light;\n$dark:                          h.$dark;\n$white:                       #fff !default;\n$black:                       #000 !default;\n$body-bg:                     #fff !default;\n$gray-100:                    #f8f9fa !default;\n$btn-toggle-color:              $black !default;\n\n$carousel-dark-indicator-active-bg:  #fff !default;\n$carousel-dark-caption-color:        #fff !default;\n$carousel-dark-control-icon-filter:  invert(0) grayscale(100) !default;\n\n$primary-text-emphasis-dark:        mix(white, h.$primary, h.$dark-mode-tint) !default;\n$secondary-text-emphasis-dark:      mix(white, h.$secondary, h.$dark-mode-tint) !default;\n$link-color-dark:                   mix(white, h.$primary, h.$dark-mode-tint) !default;\n$primary-bg-subtle-dark:            mix(black, h.$primary, h.$dark-mode-shade) !default;\n$primary-border-subtle-dark:        mix(black, h.$primary, calc(h.$dark-mode-shade / 2)) !default;\n\n$dropdown-transition: opacity .15s ease-in-out !default;\n$dropdown-horizontal-margin-top: calc((-1.5 * 1rem) - 2px);\n$dropdown-horizontal-padding-y: calc(1rem + 2px);\n\n$theme-colors: (\n  \"primary\":       $primary,\n  \"secondary\":     $secondary,\n  \"success\":       $success,\n  \"info\":          $info,\n  \"warning\":       $warning,\n  \"danger\":        $danger,\n  \"light\":         $light,\n  \"dark\":          $dark,\n  \"white\":         $white,\n  \"black\":         $black,\n  \"body\":          $body-bg,\n  \"body-tertiary\": $gray-100,\n);\n\n$btn-padding-y-xs:            .08rem !default;\n$btn-padding-x-xs:            0.3rem !default;\n$btn-font-size-xs:            $font-size-base * .6 !default;\n$btn-border-radius-xs:        .2rem !default;\n\n// Padding settings\n$padding-x: h.$padding-x;\n$padding-y: h.$padding-y;"
  },
  {
    "path": "assets/scss/common/_variables.scss",
    "content": "// Bootstrap variables overrides for theme\n$enable-negative-margins:       true;\n$enable-important-utilities:    true !default;\n\n// Remove the border from the focused navigation toggler\n$navbar-toggler-focus-width:    0 !default;\n\n$base-url:                      $base-url;\n\n// scss-docs-start font\n$font-family-sans-serif:        $theme-font, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\" !default;\n$font-size-base:                $font-size-base !default;\n$headings-font-weight:          600 !default;\n$font-weight-lighter:           lighter !default;\n$font-weight-light:             200 !default;\n$font-weight-normal:            300 !default;\n$font-weight-bold:              600 !default;\n$font-weight-bolder:            bolder !default;\n\nstrong {\n    font-weight:                600 if($enable-important-utilities, !important, null);\n}\n// scss-docs-end font\n\n$theme-border-radius:           0.375rem;\n$tooltip-border-radius:         $theme-border-radius;\n\n$white:                       #fff !default;\n$black:                       #000 !default;\n$body-bg:                     #fff !default;\n$gray-100:                    #f8f9fa !default;\n$btn-toggle-color:              $black !default;\n\n$card-color:                    var(--bs-body-color);\n\n$carousel-dark-indicator-active-bg:  #fff !default;\n$carousel-dark-caption-color:        #fff !default;\n$carousel-dark-control-icon-filter:  invert(0) grayscale(100) !default;\n\n// scss-docs-start color-mode\n$primary-text-emphasis-dark:        mix(white, $primary, $dark-mode-tint) !default;\n$secondary-text-emphasis-dark:      mix(white, $secondary, $dark-mode-tint) !default;\n$link-color-dark:                   mix(white, $primary, $dark-mode-tint) !default;\n$primary-bg-subtle-dark:            mix(black, $primary, $dark-mode-shade) !default;\n$primary-border-subtle-dark:        mix(black, $primary, $dark-mode-shade / 2) !default;\n// scss-docs-end color-mode\n\n// scss-docs-start horizontal-nav\n$dropdown-transition: opacity .15s ease-in-out !default;\n$dropdown-horizontal-margin-top: calc((-1.5 * 1rem) - 2px);\n$dropdown-horizontal-padding-y: calc(1rem + 2px);\n// scss-docs-end horizontal-nav\n\n$theme-colors: (\n  \"primary\":       $primary,\n  \"secondary\":     $secondary,\n  \"success\":       $success,\n  \"info\":          $info,\n  \"warning\":       $warning,\n  \"danger\":        $danger,\n  \"light\":         $light,\n  \"dark\":          $dark,\n  \"white\":         $white,\n  \"black\":         $black,\n  \"body\":          $body-bg,\n  \"body-tertiary\": $gray-100,\n);\n\n$btn-padding-y-xs:            .08rem !default;\n$btn-padding-x-xs:            0.3rem !default;\n$btn-font-size-xs:            $font-size-base * .6 !default;\n$btn-border-radius-xs:        .2rem !default;\n\n// Padding settings\n$padding-x: $padding-x;\n$padding-y: $padding-y;"
  },
  {
    "path": "assets/scss/components/_abbr.scss",
    "content": "@media (hover: none) {\n    abbr[title] {\n        position: relative;\n        text-decoration: underline dotted;\n    }\n    \n    abbr[title]:hover::after,\n    abbr[title]:focus::after {\n        content: attr(title);\n        position: absolute;\n        left: 0;\n        bottom: -30px;\n        width: auto;\n        white-space: nowrap;\n        background-color: var(--bs-body-bg);\n        color: var(--bs-tooltip-color);\n        border-radius: 3px;\n        box-shadow: 1px 1px 5px 0 rgba(0,0,0,0.4);\n        font-size: 14px;\n        padding: 3px 5px;\n    }\n}"
  },
  {
    "path": "assets/scss/components/_alert.scss",
    "content": ".alert code {\n    color: inherit;\n}\n\n/* stylelint-disable declaration-block-no-redundant-longhand-properties */\n.alert a {\n    color: inherit;\n    \n    &:link,\n    &:visited,\n    &:hover,\n    &:active {\n        text-decoration-line: underline;\n        text-decoration-style: dotted;\n        text-decoration-color: var(--bs-body);\n    }    \n}\n/* stylelint-enable declaration-block-no-redundant-longhand-properties */\n"
  },
  {
    "path": "assets/scss/components/_blockquote.scss",
    "content": ".blockquote {\n    border-left: 0.3rem solid;\n    border-color: $secondary;\n    padding: 1rem 1.5rem;\n}\n\n.blockquote-alert {\n    --bs-blockquote-alert-color: #{$secondary};\n\n    border-left: 0.3rem solid;\n    border-color: var(--bs-blockquote-alert-color);\n    padding: .5rem 1.5rem;\n}\n\n.blockquote-alert > p:nth-of-type(2) {\n    margin-bottom: 0;\n}\n\n.blockquote-alert-heading {\n    font-weight: bold;\n    color: var(--bs-blockquote-alert-color);\n}\n\n.blockquote-alert-caution {\n    --bs-blockquote-alert-color: var(--#{$prefix}danger);\n}\n\n.blockquote-alert-important {\n    --bs-blockquote-alert-color: var(--#{$prefix}primary);\n}\n\n.blockquote-alert-note {\n    --bs-blockquote-alert-color: var(--#{$prefix}info);\n}\n\n.blockquote-alert-tip {\n    --bs-blockquote-alert-color: var(--#{$prefix}success);\n}\n\n.blockquote-alert-warning {\n    --bs-blockquote-alert-color: var(--#{$prefix}warning);\n}\n\n.blockquote-alert a.btn-link {\n    --bs-link-color: var(--bs-blockquote-alert-color);\n    --bs-link-hover-color: color-mix(in srgb, var(--bs-link-color), black 20%);\n\n    color: var(--bs-link-color) !important;\n\n    &:hover,\n    &:focus {\n        color: var(--bs-link-hover-color) !important;\n    }\n}\n"
  },
  {
    "path": "assets/scss/components/_button.scss",
    "content": "/* Set hover color for primary button to white (overrides color contrast defined in mixin) */\n.btn-outline-primary:hover,\n.btn-primary:focus,\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n    color: #fff if($enable-important-utilities, !important, null);\n}\n\n.btn-social {\n    background-color: transparent;\n    \n    --bs-btn-bg: transparent;\n    --bs-btn-border-width: none;\n    --bs-btn-color: var(--bs-secondary);\n    --bs-btn-border-color: none;\n    --bs-btn-hover-bg: none;\n    --bs-btn-hover-border-color: none;\n    --bs-btn-active-bg: none;\n    --bs-btn-active-border-color: none;\n}\n\n.btn-social:hover,\n.btn-social:focus,\n.btn-social:active,\n.btn-social.active,\n.open > .dropdown-toggle.btn-primary {\n    background-color: transparent;\n    color: var(--bs-primary) if($enable-important-utilities, !important, null);\n}\n\na.btn {\n    margin-top: $spacer * .25;\n    margin-bottom: $spacer * .25;\n}\n\n.btn-close {\n    background-color: transparent if($enable-important-utilities, !important, null);\n    background-image: var(--#{$prefix}btn-close-bg) if($enable-important-utilities, !important, null);\n    background-position: center if($enable-important-utilities, !important, null);\n    background-repeat: no-repeat if($enable-important-utilities, !important, null);\n    background-size: $btn-close-width if($enable-important-utilities, !important, null);\n}\n\n.btn-link {\n    --bs-btn-padding-x: 0;\n    --bs-btn-padding-y: 0;\n\n    margin: 0 !important;\n}\n\n.btn-xs {\n  @include button-size($btn-padding-y-xs, $btn-padding-x-xs, $btn-font-size-xs, $btn-border-radius-xs);\n}\n\n.btn {\n    --bs-border-radius: #{$theme-border-radius};\n}\n"
  },
  {
    "path": "assets/scss/components/_card.scss",
    "content": "// add zoom animation with opacity change on card img hover\n// source: https://stackoverflow.com/a/43816376\n\n.card-img-bg {\n    background-color: var(--#{$prefix}secondary-bg);\n}\n\n.card {\n    --bs-card-border-radius: #{$theme-border-radius};\n    --bs-card-inner-border-radius: #{$theme-border-radius};\n    --bs-border-radius: #{$theme-border-radius};\n    --bs-card-bg: transparent;\n}\n\n.card .card-img-wrap {\n    overflow: hidden;\n    position: relative;\n}\n\n.card .card-img-wrap:has(.card-img-top) {\n  border-top-left-radius: var(--#{$prefix}card-inner-border-radius);\n  border-top-right-radius: var(--#{$prefix}card-inner-border-radius);\n}\n\n.card .card-img-wrap:has(.card-img-bottom) {\n  border-bottom-right-radius: var(--#{$prefix}card-inner-border-radius);\n  border-bottom-left-radius: var(--#{$prefix}card-inner-border-radius);\n}\n\n.card-zoom {\n    cursor: pointer;\n}\n\n.card-img-top {\n    --bs-border-radius: #{$theme-border-radius};\n\n    border-top-left-radius: var(--bs-border-radius) !important;\n    border-top-right-radius: var(--bs-border-radius) !important;\n}\n\n.card-img-wrap img {\n    transition: transform 0.25s ease;\n    width: 100%;\n}\n\n.card-icon {\n    color: $secondary;\n}\n\n.card-zoom::after .card-img-wrap img {\n    content: \"\";\n    position: absolute;\n    inset: 0;\n    background: rgba(255, 255, 255, 0.3);\n    opacity: 0;\n    transition: opacity 0.25s;\n}\n\n.card-zoom:hover .card-img-wrap img {\n    transform: scale(1.1);\n    opacity: 0.5;\n}\n\n.card-zoom:hover::after .card-img-wrap img {\n    opacity: 1;\n}\n\n.card-emphasize {\n    transition: 0.3s transform cubic-bezier(0.155, 1.105, 0.295, 1.12), 0.3s box-shadow, 0.3s -webkit-transform cubic-bezier(0.155, 1.105, 0.295, 1.12);\n    cursor: pointer;\n}\n\n.card-emphasize:hover {\n    transform: scale(1.01);\n    box-shadow: 0 10px 20px rgba(0, 0, 0, 0.12), 0 4px 8px rgba(0, 0, 0, 0.06);\n}\n\n.card-minimal {\n    border: none;\n    font-weight: bold;\n\n    &:hover,\n    &:focus {\n        text-decoration: underline;\n    }\n}\n\n// stylelint-disable annotation-no-unknown\n.card-body-link {\n    color: $body-color if($enable-important-utilities, !important, null);\n}\n\n.card-body-margin {\n    margin-bottom: $spacer * 1.5; // equals mb-4\n}\n\n@if $enable-dark-mode {\n    @include color-mode(dark) {\n        .card-body-link {\n            color: $gray-500 if($enable-important-utilities, !important, null);\n        }\n    }\n}\n\n.card-img-overlay .card-body-link {\n    margin-top: auto;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    display: -webkit-box;\n    -webkit-line-clamp: 3;\n    -webkit-box-orient: vertical;\n}\n\n.card-zoom .card-body-link {\n    &:hover,\n    &:focus {\n        color: shade-color($primary, $link-shade-percentage) if($enable-important-utilities, !important, null);\n    }\n}\n\n@if $enable-dark-mode {\n    @include color-mode(dark) {\n        .card-zoom .card-body-link {\n            &:hover,\n            &:focus {\n                color: $primary-bg-subtle-dark if($enable-important-utilities, !important, null);\n            }\n        }\n    }\n}\n\n// stylelint-enable annotation-no-unknown\n\n// make tag-link and card-button clickable on top of the stretched-link.\n.card .tag-link, .card .card-button {\n    z-index: 2;\n    position: relative;\n}\n\n.card-button-link {\n    text-decoration: underline if($enable-important-utilities, !important, null);\n}\n\n// support horizontally scrollable card groups\n.card-container-wrapper {\n\tposition: relative;\n}\n\ndiv.card-container-wrapper::after {\n\tcontent: \"\";\n\tposition: absolute;\n\tinset: 0;\n\theight: calc(100% - 2rem);\n\tbackground: linear-gradient(\n\t\t90deg, \n\t\tvar(--bs-body-bg) 0%,\n\t\ttransparent 1.5rem,\n\t\ttransparent calc(100% - 1.5rem),\n\t\tvar(--bs-body-bg) 100%\n\t);\n\tpointer-events: none;\n}\n\n.card-container {\n    padding-left: 1.5rem;\n    padding-right: 1.5rem;\n\tgap: 1.5rem;\n    margin-bottom: 2rem;\n\tscroll-snap-type: x proximity;\n}\n\n.card-block-1 {\n    width: 80%;\n\tscroll-snap-align: center;\n}\n\n.card-block-2 {\n    width: 40%;\n\tscroll-snap-align: center;\n}\n\n.card-block-3 {\n    width: 27%;\n\tscroll-snap-align: center;\n}\n\n.card-block-4 {\n    width: 20%;\n\tscroll-snap-align: center;\n}\n\n.card-block-5 {\n    width: 16%;\n\tscroll-snap-align: center;\n}\n\n// Hover link icon: appears on card hover/focus to signal clickability\n.card-link-icon {\n    display: inline-flex;\n    align-items: center;\n    opacity: 0;\n    transform: translateX(-4px);\n    transition: opacity 0.2s ease, transform 0.2s ease;\n    vertical-align: middle;\n    font-size: 0.75em;\n    margin-left: 0.25rem;\n}\n\n.card:hover .card-link-icon,\n.card:focus-within .card-link-icon {\n    opacity: 1;\n    transform: translateX(0);\n}\n"
  },
  {
    "path": "assets/scss/components/_carousel.scss",
    "content": ".carousel-inner {\n    border-radius: #{$theme-border-radius};\n}\n\n.gradient {\n    width: 100%;\n    height: 100%;\n    left: 0;\n    right: 0;\n    bottom: 0;\n    background-color: rgba(0, 0, 0, 0.3);\n}\n"
  },
  {
    "path": "assets/scss/components/_clipboard.scss",
    "content": "// Adapted from https://simplernerd.com/hugo-add-copy-to-clipboard-button/\n\n.clipboard-button {\n    position: absolute;\n    right: 0;\n    padding: 2px 7px 5px;\n    margin: 5px;\n    color: $secondary;\n    background-color: transparent;\n    border-style: none;\n    font-size: 0.8em;\n    z-index: 1;\n    opacity: 0;\n    transition: 0.1s;\n}\n\n.clipboard-button > svg {\n    fill: $secondary;\n}\n\n.clipboard-button:hover {\n    cursor: pointer;\n    color: $primary;\n}\n\n.clipboard-button:hover > svg {\n    fill: $primary;\n}\n\n.clipboard-button:focus {\n    outline: 0;\n}\n\n.highlight {\n    position: relative;\n}\n\n.highlight:hover > .clipboard-button {\n    opacity: 1;\n    transition: 0.2s;\n}\n"
  },
  {
    "path": "assets/scss/components/_command.scss",
    "content": "/* Adapted from PrismJS 1.29.0\nhttps://prismjs.com/download.html#themes=prism&plugins=command-line */\n\n/**\n * prism.js default theme for JavaScript, CSS and HTML\n * Based on dabblet (http://dabblet.com)\n * @author Lea Verou\n */\n\n.command-line-prompt {\n    border-right: 1px solid #999;\n    display: block;\n    float: left;\n    font-size: 100%;\n    letter-spacing: -1px;\n    margin-right: 1em;\n    pointer-events: none;\n    text-align: right;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n}\n\n.command-line-prompt > span::before {\n    opacity: 0.7;\n    content: \" \";\n    display: block;\n    padding-right: 0.8em;\n}\n\n.command-line-prompt > span[data-prompt]::before {\n    content: attr(data-prompt);\n}\n\n.command-line-prompt > span[data-continuation-prompt]::before {\n    content: attr(data-continuation-prompt);\n}\n\n.command-line span.token.output {\n    /* Make shell output lines a bit lighter to distinguish them from shell commands */\n    opacity: 0.7;\n}\n"
  },
  {
    "path": "assets/scss/components/_docs.scss",
    "content": ".docs-controls .nav-link,\n.file-controls .nav-link {\n    border-top-left-radius: #{$theme-border-radius};\n    border-top-right-radius: #{$theme-border-radius};\n    margin-left: #{$theme-border-radius};\n}\n\n.docs-panel,\n.file-panel {\n    border: 1px solid var(--#{$prefix}border-color);\n    overflow: hidden;\n}\n\n.docs-panel, .docs-panel .collapse,\n.file-panel, .file-panel .collapse {\n    border-radius: #{$theme-border-radius};\n}\n"
  },
  {
    "path": "assets/scss/components/_feature.scss",
    "content": ".feature {\n    margin-top: calc(0.3 * var(--navbar-offset));\n}\n"
  },
  {
    "path": "assets/scss/components/_footer.scss",
    "content": ".footer {\n    // background-color: $gray-800 if($enable-important-utilities, !important, null);\n    color: var(--bs-secondary) if($enable-important-utilities, !important, null);\n}\n\n.link-bg-footer {\n    color: var(--bs-secondary) if($enable-important-utilities, !important, null);\n    \n    &:hover,\n    &:focus {\n        color: var(--bs-tertiary-color) if($enable-important-utilities, !important, null);\n    }\n}\n\n@if $enable-dark-mode {\n    @include color-mode(dark) {\n        .footer {\n            color: $gray-500 if($enable-important-utilities, !important, null);\n        }\n\n        .link-bg-footer {\n            color: $gray-500 if($enable-important-utilities, !important, null);\n            \n            &:hover,\n            &:focus {\n                color: $gray-400 if($enable-important-utilities, !important, null);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "assets/scss/components/_img.scss",
    "content": ".img-wrap {\n    overflow: hidden;\n    position: relative;\n}\n\n.img-wrap img {\n    height: 100%;\n    width: 100%;\n    object-fit: cover;\n}\n\n.card-img-h100 {\n    width: auto;\n    height: 100%;\n    object-fit: cover;\n}\n\n.mirrorred {\n    -webkit-transform: scaleX(-1);\n    transform: scaleX(-1);\n}\n\n.background-img {\n    --overlay-offset: #{$overlay-offset};\n\n    height: calc(100vh - var(--overlay-offset));\n    width: 100vw;\n    object-fit: cover;\n}\n\n.figure-caption {\n    margin-left: #{$theme-border-radius};\n}\n"
  },
  {
    "path": "assets/scss/components/_kbd.scss",
    "content": "// scss-docs-start kbd\nkbd {\n    border-radius: #{$theme-border-radius};\n}\n\n// scss-docs-end kbd"
  },
  {
    "path": "assets/scss/components/_nav.scss",
    "content": ".nav-tabs {\n    border: none !important;\n}\n\n.nav-callout, .tab-content {\n    --#{$prefix}nav-callout-bg: var(--#{$prefix}body-bg);\n    --#{$prefix}nav-callout-active-bg: var(--bs-primary-bg-subtle);\n    --#{$prefix}nav-callout-gap: #{$nav-underline-gap};\n\n    column-gap: var(--#{$prefix}nav-callout-gap) !important;\n}\n\n.nav-callout + .tab-content {\n    background-color: var(--#{$prefix}nav-callout-bg);\n    padding: 2 * $spacer;\n    margin-top: 0 !important;\n}\n\n.nav-callout .nav-link {\n    display: flex;\n    text-align: start;\n    vertical-align: text-top;\n    border-radius: 0;\n    padding: 0 0 (4 * $spacer);\n    border-bottom: none;\n    position: relative;\n}\n\n.nav-callout .nav-link.active {\n    background-image: linear-gradient(to top right, var(--#{$prefix}nav-callout-bg) 50%, transparent 0);\n    background-size: 50% (3 * $spacer);\n    background-repeat: no-repeat;\n    background-position: 50% bottom;\n    font-weight: 600;\n    color: var(--bs-nav-underline-link-active-color);\n\n    // Diagonal border line\n    &::before {\n        content: \"\";\n        position: absolute;\n        bottom: 0;\n        left: 25%;\n        width: 50%;\n        height: (3 * $spacer);\n        background: linear-gradient(\n            to top right,\n            transparent calc(50% - 0.5px),\n            var(--#{$prefix}border-color) calc(50% - 0.5px),\n            var(--#{$prefix}border-color) calc(50% + 0.5px),\n            transparent calc(50% + 0.5px)\n        );\n        pointer-events: none;\n    }\n\n    // Left border only\n    &::after {\n        content: \"\";\n        position: absolute;\n        bottom: 0;\n        left: 25%;\n        width: 50%;\n        height: (3 * $spacer);\n        border-left: 1px solid var(--#{$prefix}border-color);\n        pointer-events: none;\n    }\n}\n\n.nav-callout .accordion-button {\n    background-color: var(--#{$prefix}nav-callout-bg) !important;\n    border: solid;\n    border-color: var(--#{$prefix}border-color);\n    border-radius: var(--#{$prefix}accordion-inner-border-radius) !important;\n    margin-bottom: 0;\n\n    &:focus {\n        border-bottom: none !important;\n        box-shadow: none;\n    }\n\n    &:not(.collapsed) {\n        box-shadow: none;\n    }\n}\n\n.nav-callout .accordion-item {\n    margin-top: 2 * $spacer;\n    margin-bottom: 2 * $spacer;\n    border: none;\n}\n\n.nav-callout .accordion-button[aria-expanded=\"false\"] {\n    border-bottom: solid !important;\n    border-color: var(--#{$prefix}border-color) !important;\n    border-radius: var(--#{$prefix}accordion-inner-border-radius);\n}\n\n.nav-callout .accordion-button[aria-expanded=\"true\"] {\n    border-color: var(--#{$prefix}border-color) !important;\n    border-bottom: none !important;\n    border-radius: var(--#{$prefix}accordion-inner-border-radius) var(--#{$prefix}accordion-inner-border-radius) 0 0 !important;\n    padding-bottom: 3 * $spacer;\n    background-image: linear-gradient(to top right, var(--#{$prefix}nav-callout-active-bg) 50%, transparent 0);\n    background-size: 10% (2.5 * $spacer);\n    background-repeat: no-repeat;\n    background-position: 10% bottom;\n}\n\n.nav-callout .accordion-collapse {\n    background-color: var(--#{$prefix}nav-callout-active-bg) !important;\n    border-radius: 0 0 var(--#{$prefix}accordion-inner-border-radius) var(--#{$prefix}accordion-inner-border-radius);\n    border-top: none !important;\n    border-left: solid;\n    border-right: solid;\n    border-bottom: solid;\n    border-color: var(--#{$prefix}border-color);\n}\n\n.nav-callout, .pagination {\n    --bs-border-radius: #{$theme-border-radius};\n}\n\n.nav-callout .tab-content {\n    border-radius: #{$theme-border-radius};\n}\n\n@if $enable-dark-mode {\n    @include color-mode(dark) {\n        .nav-callout .accordion-button[aria-expanded=\"true\"] {\n            background-image: linear-gradient(to top right, shade-color($primary, 70%) 50%, transparent 0);\n        }\n\n        .nav-callout .accordion-collapse {\n            background-color: shade-color($primary, 70%) !important;\n        }\n    }\n}\n"
  },
  {
    "path": "assets/scss/components/_navbar.scss",
    "content": "// stylelint-disable annotation-no-unknown\n\n// adapted from https://www.codeply.com/p/UsTEwDkzNp#\n.checkbox {\n\topacity: 0;\n\tposition: absolute;\n}\n\n.mode-switch {\n    --#{$prefix}mode-switch-width: 3em;\n}\n\n.mode-switch .label {\n\tborder-color: var(--#{$prefix}border-color);\n    border-style: solid;\n    border-width: 1px;\n\tborder-radius: var(--#{$prefix}mode-switch-width);\n\tcursor: pointer;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n\tpadding: 5px;\n\tposition: relative;\n\theight: calc(1px + var(--#{$prefix}mode-switch-width) / 2);\n\twidth: var(--#{$prefix}mode-switch-width);\n    transform: scale(0.9);\n}\n\n.notransition {\n    -webkit-transition: none !important;\n    -moz-transition: none !important;\n    -o-transition: none !important;\n    transition: none !important;\n}\n\n.mode-switch .label .ball {\n    background-color: var(--#{$prefix}border-color);\n\tborder-radius: 50%;\n\tposition: absolute;\n\ttop: 2px;\n\tleft: 2px;\n\theight: calc((var(--#{$prefix}mode-switch-width) / 2) - 5px);\n\twidth: calc((var(--#{$prefix}mode-switch-width) / 2) - 5px);\n\ttransition: transform 0.2s linear;\n}\n\n.mode-switch .checkbox:checked + .label .ball {\n\ttransform: translateX(calc((var(--#{$prefix}mode-switch-width) / 2) - 1px));\n}\n\n@if $enable-dark-mode {\n    [data-bs-theme=\"light\"] .mode-switch .ball {\n        transform: translateX(calc((var(--#{$prefix}mode-switch-width) / 2) - 1px));\n    }\n}\n\n.mode-switch .fa-moon {\n\tcolor: $yellow;\n    transform: scale(0.8);\n}\n\n.mode-switch .fa-sun {\n\tcolor: var(--#{$prefix}bs-body-color);\n    transform: scale(0.8);\n}\n\n.mode-toggle > input {\n\tz-index: 1;\n\tcursor: pointer;\n    height: 25px;\n    width: 25px;\n}\n\n.mode-toggle > label {\n\tz-index: 0;\n\tcursor: pointer;\n}\n\n.mode-toggle .label svg {\n    height: 1em;\n    width: 1.25em;\n}\n\n// Source: https://jsfiddle.net/njhgr40m/\n\n@if $enable-dark-mode {\n    [data-bs-theme-animate=\"true\"] .navbar {\n        transition: 0.5s ease-in-out;\n    }\n}\n\n.navbar {\n    --bs-navbar-expanded-color: var(--bs-body-bg);\n    --bs-navbar-toggler-color: var(--bs-navbar-hover-color);\n\n    background-color: transparent;\n\n    @each $state, $val in $theme-colors {\n        --bs-navbar-color-#{$state}: #{$val};\n    }\n}\n\n.navbar[data-transparent=\"true\"] {\n    backdrop-filter: none;\n    transition: all 0.3s ease;\n\n    &.navbar-scrolled {\n        backdrop-filter: blur(10px);\n    }\n}\n\n.nav-active, .navbar-expanded {\n    background-color: var(--bs-navbar-expanded-color);\n    border-bottom: 1px solid var(--bs-secondary-bg);\n}\n\n.nav-link {\n    margin: 0 .15rem;\n    display: inline-flex;\n}\n\n.navbar-title, .navbar-title-center, .navbar-title-start {\n    display: inline-block;\n    white-space: normal;\n    vertical-align: middle;\n    padding: 0 $spacer;\n    width: 100% !important;\n}\n\n.navbar-title, .navbar-title-center {\n    text-align: center !important;\n}\n\n.navbar-contrast .nav-link.active, .navbar-contrast .nav-link.show, .navbar-contrast .nav-link:hover {\n    border-bottom: solid 1px var(--bs-navbar-hover-color);\n    margin-bottom: -1px;\n}\n\n.navbar-brand {\n    margin-right: 0;\n}\n\n.navbar-contrast {\n    --bs-navbar-color: white !important;\n    --bs-navbar-hover-color: white !important;\n    --bs-navbar-disabled-color: white !important;\n    --bs-navbar-active-color: white !important;\n    --bs-navbar-toggler-color: white;\n\n    .navbar-title, .navbar-brand, .mode-switch {\n        --#{$prefix}border-color: white;\n\n        color: white !important;\n    }\n\n    .mode-switch .fa-moon {\n        color: $white;\n    }\n}\n\n.navbar-expanded {\n    box-shadow: $box-shadow-sm;\n    min-height: 100vh;\n    align-items: start;\n}\n\n.navbar-expanded .navbar-collapse {\n    margin-top: 2rem;\n}\n\n@each $h, $size in $font-sizes {\n    .navbar-fs-#{$h} {\n        font-size: #{$size};\n    }\n}\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n    $next: breakpoint-next($breakpoint, $grid-breakpoints);\n    $infix: breakpoint-infix($next, $grid-breakpoints);\n\n    @if $infix != '' {\n        @include media-breakpoint-up($next) {\n            .navbar#{$infix}-fs { \n                font-size: inherit;\n            } \n        }\n    }\n}\n\n.navbar-icon {\n    padding-right: var(--bs-navbar-nav-link-padding-x);\n    padding-left: var(--bs-navbar-nav-link-padding-x);\n}\n\n.nav-item .vr {\n    color: var(--bs-navbar-color);\n}\n\n.navbar .nav-item {\n    display: flex;\n    align-items: center;\n    white-space: nowrap;\n}\n\n.navbar-collapse:not(.show, .collapsing) .nav-item:first-of-type {\n    // double padding between brand logo / search bar and first nav item\n    // only apply when navbar is fully expanded (not toggled to show)\n    padding-left: var(--bs-navbar-nav-link-padding-x);\n}\n\n// Remove padding when navbar is toggled open on small devices\n.navbar-collapse.show .nav-item:first-of-type {\n    padding-left: 0;\n}\n\n.navbar-collapse .dropdown {\n    display: inline;\n    align-items: normal;\n}\n\n.navbar-expanded .btn {\n    font-size: 1em;\n}\n\n.navbar .btn {\n    border-radius: #{$theme-border-radius};    \n}\n\n.navbar-expanded .search-input {\n    margin-bottom: 1rem;\n}\n\n/* Remove border from toggler */\n.navbar-toggler {\n    border: 0 if($enable-important-utilities, !important, null);\n}\n\n.navbar-toggler:focus,\n.navbar-toggler:active,\n.navbar-toggler-icon:focus {\n    outline: none if($enable-important-utilities, !important, null);\n    box-shadow: none if($enable-important-utilities, !important, null);\n    border: 0 if($enable-important-utilities, !important, null);\n}\n\n.fw-30 {\n    width: 30px !important;\n}\n\n/* Lines of the Toggler */\n.toggler-icon {\n    width: 30px;\n    height: 3px;\n    display: block;\n    transition: all 0.2s;\n}\n\n/* Adds Space between the lines */\n.middle-bar {\n    margin: 5px auto;\n}\n\n/* State when navbar is opened (START) */\n.navbar-toggler .top-bar {\n    transform: rotate(45deg);\n    transform-origin: 10% 10%;\n}\n\n.navbar-toggler .middle-bar {\n    opacity: 0;\n    filter: alpha(opacity=0);\n}\n\n.navbar-toggler .bottom-bar {\n    transform: rotate(-45deg);\n    transform-origin: 10% 90%;\n}\n\n/* State when navbar is opened (END) */\n\n/* State when navbar is collapsed (START) */\n.navbar-toggler.collapsed .top-bar {\n    transform: rotate(0);\n}\n\n.navbar-toggler.collapsed .middle-bar {\n    opacity: 1;\n    filter: alpha(opacity=100);\n}\n\n.navbar-toggler.collapsed .bottom-bar {\n    transform: rotate(0);\n}\n\n/* State when navbar is collapsed (END) */\n\n/* Color of Toggler when collapsed */\n.navbar-toggler.collapsed .toggler-icon {\n    background-color: var(--bs-navbar-toggler-color);\n}\n\n.emphasis {\n    background-color: var(--bs-navbar-toggler-color);\n}\n\n@include color-mode(dark) {\n    .emphasis {\n        background-color: $white if($enable-important-utilities, !important, null);\n    }\n}\n\n// stylelint-enable annotation-no-unknown\n\n.navbar .dropdown-divider-bg {\n    color: var(--#{$prefix}navbar-color);\n}\n\n:root {\n    --dropdown-horizontal-bg: var(--#{$prefix}light);\n    --navbar-offset: #{$navbar-offset-xs};\n}\n\n.navbar-container {\n    min-height: calc(2rem + 10px);\n    width: 100% !important;\n}\n\n@include media-breakpoint-up(#{$navbar-size}) {\n    :root {\n        --navbar-offset: #{$navbar-offset};\n    }\n\n    .navbar-container {\n        width: auto !important;\n    }\n\n    .navbar-title {\n        text-align: initial !important;\n        padding: 0;\n    }\n\n    .navbar-brand {\n        margin-right: var(--bs-navbar-brand-margin-end);\n    }\n}\n\n@if $enable-dark-mode {\n    @include color-mode(dark) {\n        --dropdown-horizontal-bg: var(--#{$prefix}tertiary-bg);\n    }\n}\n\n.dropdown-horizontal {\n    @each $breakpoint in map-keys($grid-breakpoints) {\n        $next: breakpoint-next($breakpoint, $grid-breakpoints);\n        $infix: breakpoint-infix($next, $grid-breakpoints);\n\n        @include media-breakpoint-up($next) {\n            &#{$infix} { \n                position: static !important; \n            } \n    \n            &#{$infix} > .dropdown-menu {\n                opacity: 0;\n                display: block;\n                visibility: hidden;\n                background-color: var(--dropdown-horizontal-bg) if($enable-important-utilities, !important, null);\n                width: 100%;\n                height: auto;\n                text-align: center;\n                border-radius: 0;\n                border: 0;\n                margin-top: $dropdown-horizontal-margin-top;\n                padding-top: $dropdown-horizontal-padding-y;\n                padding-bottom: $dropdown-horizontal-padding-y;\n                box-shadow: 0.125rem 0.25rem rgba(0, 0, 0, .075);\n            \n                @include transition($dropdown-transition);\n            }\n    \n            &#{$infix} > .dropdown-menu.show {\n                visibility: visible;\n                opacity: 1;\n            }\n    \n            &#{$infix} > .dropdown-menu > li {\n                display: inline-block;\n                padding-left: $spacer;\n                padding-right: $spacer;\n            }\n    \n            &#{$infix} > .dropdown-menu > li > a {\n                padding-left: .25 * $spacer;\n                padding-right: .25 * $spacer;\n\n                &.active,\n                &:hover,\n                &:focus {\n                    color: var(--bs-body-color);\n                    border-bottom: solid 1px var(--bs-navbar-hover-color);\n                    margin-bottom: -1px;\n                    background-color: transparent;\n                }\n            }\n            \n            &#{$infix} > .nav-link.show {\n                background-color: var(--dropdown-horizontal-bg) if($enable-important-utilities, !important, null);\n            }            \n        }\n    }\n}\n\n.navbar-overlay {\n    position: absolute;\n    z-index: $zindex-fixed;\n}\n\n.form-control.is-search {\n    border: 1px solid var(--bs-border-color) !important;\n}\n\n.d-none-main-light, .d-none-inline-main-light {\n  display: none !important;\n}\n\n.d-none-main-dark {\n  display: block !important;\n}\n\n.d-none-inline-main-dark {\n  display: inline !important;\n}\n\n[data-bs-main-theme=\"dark\"] .d-none-main-light {\n  display: block !important;\n}\n\n[data-bs-main-theme=\"dark\"] .d-none-inline-main-light {\n  display: inline !important;\n}\n\n[data-bs-main-theme=\"dark\"] .d-none-main-dark, [data-bs-main-theme=\"dark\"] .d-none-inline-main-dark {\n  display: none !important;\n}\n\n.inline-menu li {\n  display: inline-block;\n  padding: 0.5rem;\n  color: var(--bs-nav-link-color);\n}\n\n.inline-menu li .active, .inline-menu li>a:hover {\n    box-shadow: inset 0 -1px 0 var(--bs-navbar-hover-color);\n}\n\nul.inline-menu {\n  padding: 0;\n}\n\nbody.navbar-open {\n    overflow: hidden;\n    position: fixed;\n    width: 100%;\n}\n"
  },
  {
    "path": "assets/scss/components/_pagination.scss",
    "content": ".pagination {\n    --bs-pagination-bg: var(--bs-primary-bg-subtle);\n    --bs-pagination-color: var(--bs-body-color);\n    --bs-pagination-border-color: none;\n    --bs-pagination-hover-color: var(--bs-pagination-active-color);\n    --bs-pagination-hover-bg: var(--bs-pagination-active-bg);\n    --bs-pagination-hover-border-color: none;\n\n    .page-item {\n        margin: 0.4rem;\n    }\n\n    .page-item:first-of-type {\n        margin-left: 0;\n    }\n}\n"
  },
  {
    "path": "assets/scss/components/_persona.scss",
    "content": ".persona {\n    min-height: 320px !important\n}\n"
  },
  {
    "path": "assets/scss/components/_popover.scss",
    "content": ".popover-header {\n    margin-top: 0;\n}\n"
  },
  {
    "path": "assets/scss/components/_sidebar.scss",
    "content": "// scss-docs-start sidebar\n.sidebar {\n    top: var(--navbar-offset);\n}\n\n.sidebar-overflow {\n    top: calc(var(--navbar-offset) + 1rem);\n    max-height: calc(100vh - var(--navbar-offset));\n    overflow-y: auto;\n    scrollbar-gutter: stable;\n}\n\n.sidebar-item {\n    --bs-border-radius: #{$theme-border-radius};\n    --bs-border-radius-sm: #{$theme-border-radius};\n    --bs-border-radius-lg: #{$theme-border-radius};\n    --bs-border-radius-xl: #{$theme-border-radius};\n    --bs-border-radius-xxl: #{$theme-border-radius};\n\n    color: rgba(0, 0, 0, 0.65);\n    margin-left: 0 !important;\n    display: block;\n    padding: 0.1875rem 0.5rem !important;\n\n    &.active {\n        color: $primary;\n    }\n\n    &:hover,\n    &:focus {\n        color: $primary;\n        background-color: tint-color($primary, 90%);\n    }\n}\n\n.sidebar-item-group {\n    --#{$prefix}link-opacity: 0.65;\n\n    border-radius: #{$theme-border-radius};\n\n    &:hover,\n    &:focus {\n        color: $primary;\n        background-color: tint-color($primary, 90%);\n    }\n    \n    > div > a {\n        display: block;\n        width: 100%;\n        color: rgba(var(--#{$prefix}body-color-rgb), var(--#{$prefix}link-opacity, 1));\n        text-decoration: none;\n        cursor: pointer;\n\n        &:hover,\n        &:focus {\n            color: $primary;\n        }\n    }\n}\n\n.sidebar-item-group > div {\n    padding: 0.1875rem 0 0.1875rem 0.5rem !important;\n}\n\n.btn-toggle-group {\n    padding: 0.25rem 0.5rem;\n    font-weight: 600;\n    color: rgba(0, 0, 0, 0.65);\n    background-color: transparent;\n\n    &:hover,\n    &:focus {\n        background-color: transparent;\n    }\n\n    &::before {\n        width: 1.25em;\n        line-height: 0;\n        content: $btn-toggle;\n        transition: transform 0.35s ease;\n        transform-origin: 0.5em 50%;\n    }\n}\n\n.btn-toggle-group[aria-expanded=\"true\"] {\n    &::before {\n        transform: rotate(90deg);\n    }\n}\n\n@if $enable-dark-mode {\n    @include color-mode(dark) {\n        .sidebar-item {\n            --#{$prefix}link-opacity: 0.65;\n\n            color: rgba(var(--#{$prefix}body-color-rgb), var(--#{$prefix}link-opacity, 1));\n\n            &.active {\n                color: $primary-text-emphasis-dark !important;\n            }\n\n            &:hover,\n            &:focus {\n                color: $primary-text-emphasis-dark !important;\n                background-color: transparent;\n                box-shadow: inset 0 0 0 1px $primary-bg-subtle-dark;\n            }\n        }\n\n        .sidebar-item-group {\n            color: var(--bs-body-color) !important;\n\n            &.active {\n                color: $primary-text-emphasis-dark !important;\n            }\n\n            &:hover,\n            &:focus {\n                color: $primary-text-emphasis-dark !important;\n                background-color: transparent;\n                box-shadow: inset 0 0 0 1px $primary-bg-subtle-dark;\n            }\n\n            > div > a {\n                &:hover,\n                &:focus {\n                    color: $primary-text-emphasis-dark !important;\n                }\n            }\n        }\n\n        .btn-toggle-group {\n            color: var(--bs-body-color);\n        \n            &:hover,\n            &:focus {\n                background-color: transparent;\n            }\n        \n            &::before {\n                content: $btn-toggle-dark;\n            }\n        }\n\n        .btn-toggle-group[aria-expanded=\"true\"] {\n            color: var(--bs-secondary-color);\n        }\n                    }\n}\n\n// Collapsible sidebar\n.sidebar-no-transition,\n.sidebar-no-transition * {\n    transition: none !important;\n}\n\nhtml.sidebar-pre-collapsed .sidebar-collapsible .sidebar-item-label {\n    max-width: 0 !important;\n    opacity: 0 !important;\n    margin-inline-start: 0 !important;\n}\n\n.sidebar-toggle-btn {\n    color: rgba(0, 0, 0, 0.65);\n\n    &:hover {\n        color: $primary;\n    }\n\n    .sidebar-icon-toggle {\n        transition: transform 0.4s ease;\n    }\n}\n\n.sidebar-item-label {\n    display: inline-block;\n    max-width: 200px;\n    overflow: hidden;\n    white-space: nowrap;\n    vertical-align: middle;\n    transition: max-width 0.2s ease, opacity 0.15s ease, margin-inline-start 0.2s ease;\n}\n\n.sidebar-collapsed {\n    .sidebar-item-label {\n        max-width: 0;\n        opacity: 0;\n        margin-inline-start: 0 !important;\n    }\n\n    .sidebar-toggle-btn .sidebar-icon-toggle {\n        transform: rotate(180deg);\n    }\n}\n\n@if $enable-dark-mode {\n    @include color-mode(dark) {\n        .sidebar-toggle-btn {\n            color: var(--bs-body-color);\n\n            &:hover {\n                color: $primary-text-emphasis-dark;\n            }\n        }\n    }\n}\n\n// Secondary group row: stack vertically (button above link) when sidebar is icon-only\n.sidebar-collapsed .sidebar-secondary-row,\nhtml.sidebar-pre-collapsed .sidebar-secondary-row {\n    flex-direction: column-reverse;\n    align-items: center;\n}\n\n// Secondary group — icon rotates down (180°) when collapsed, up (0°) when expanded\n.sidebar-secondary-icon {\n    transition: transform 0.2s ease;\n    transform: rotate(180deg);\n}\n\n.sidebar-secondary-toggle[aria-expanded=\"true\"] .sidebar-secondary-icon {\n    transform: rotate(0deg);\n}\n\n// Secondary group toggle button\n.sidebar-secondary-toggle {\n    color: rgba(0, 0, 0, 0.65);\n    padding: 0.1875rem 0.5rem;\n    border-radius: #{$theme-border-radius};\n\n    &:hover,\n    &:focus {\n        color: $primary;\n        background-color: tint-color($primary, 90%);\n    }\n}\n\n@if $enable-dark-mode {\n    @include color-mode(dark) {\n        .sidebar-secondary-toggle {\n            color: rgba(var(--#{$prefix}body-color-rgb), 0.65);\n\n            &:hover,\n            &:focus {\n                color: $primary-text-emphasis-dark;\n                background-color: transparent;\n                box-shadow: inset 0 0 0 1px $primary-bg-subtle-dark;\n            }\n        }\n    }\n}\n\n// Flex column sidebar so .sidebar-spacer pushes the secondary group to the bottom\n@include media-breakpoint-up(md) {\n    .sidebar-has-spacer {\n        display: flex;\n        flex-direction: column;\n        min-height: 100%;\n\n        > ul.list-unstyled {\n            flex: 1;\n            display: flex;\n            flex-direction: column;\n        }\n    }\n\n    .sidebar-spacer {\n        flex: 1 1 0;\n        min-height: 1rem;\n    }\n}\n\n// scss-docs-end sidebar\n\n.dropdown-toggle {\n    outline: 0;\n    display: flex;\n    align-items: center;\n}\n"
  },
  {
    "path": "assets/scss/components/_syntax-dark.scss",
    "content": "/* Background */ .bg { color: #c9d1d9; background-color: #0d1117; }\n/* PreWrapper */ .chroma { color: #c9d1d9; background-color: #0d1117; }\n/* Other */ .chroma .x {  }\n/* Error */ .chroma .err { color: #f85149 }\n/* CodeLine */ .chroma .cl {  }\n/* LineLink */ .chroma .lnlinks { outline: none; text-decoration: none; color: inherit }\n/* LineTableTD */ .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; }\n/* LineTable */ .chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; }\n/* LineHighlight */ .chroma .hl { background-color: #373700 }\n/* LineNumbersTable */ .chroma .lnt { white-space: pre; -webkit-user-select: none; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #64686c }\n/* LineNumbers */ .chroma .ln { white-space: pre; -webkit-user-select: none; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #999fa8 }\n/* Line */ .chroma .line { display: flex; }\n/* Keyword */ .chroma .k { color: #ff7b72 }\n/* KeywordConstant */ .chroma .kc { color: #79c0ff }\n/* KeywordDeclaration */ .chroma .kd { color: #ff7b72 }\n/* KeywordNamespace */ .chroma .kn { color: #ff7b72 }\n/* KeywordPseudo */ .chroma .kp { color: #79c0ff }\n/* KeywordReserved */ .chroma .kr { color: #ff7b72 }\n/* KeywordType */ .chroma .kt { color: #ff7b72 }\n/* Name */ .chroma .n {  }\n/* NameAttribute */ .chroma .na { color: #00cccc }\n/* NameBuiltin */ .chroma .nb { color: #00a2d8 }\n/* NameBuiltinPseudo */ .chroma .bp {  }\n/* NameClass */ .chroma .nc { color: #f0883e; font-weight: bold }\n/* NameConstant */ .chroma .no { color: #79c0ff; font-weight: bold }\n/* NameDecorator */ .chroma .nd { color: #d2a8ff; font-weight: bold }\n/* NameEntity */ .chroma .ni { color: #ffa657 }\n/* NameException */ .chroma .ne { color: #f0883e; font-weight: bold }\n/* NameFunction */ .chroma .nf { color: #d2a8ff; font-weight: bold }\n/* NameFunctionMagic */ .chroma .fm {  }\n/* NameLabel */ .chroma .nl { color: #79c0ff; font-weight: bold }\n/* NameNamespace */ .chroma .nn { color: #ff7b72 }\n/* NameOther */ .chroma .nx {  }\n/* NameProperty */ .chroma .py { color: #79c0ff }\n/* NameTag */ .chroma .nt { color: #7ee787 }\n/* NameVariable */ .chroma .nv { color: #79c0ff }\n/* NameVariableClass */ .chroma .vc {  }\n/* NameVariableGlobal */ .chroma .vg {  }\n/* NameVariableInstance */ .chroma .vi {  }\n/* NameVariableMagic */ .chroma .vm {  }\n/* Literal */ .chroma .l { color: #a5d6ff }\n/* LiteralDate */ .chroma .ld { color: #79c0ff }\n/* LiteralString */ .chroma .s { color: #a5d6ff }\n/* LiteralStringAffix */ .chroma .sa { color: #79c0ff }\n/* LiteralStringBacktick */ .chroma .sb { color: #a5d6ff }\n/* LiteralStringChar */ .chroma .sc { color: #a5d6ff }\n/* LiteralStringDelimiter */ .chroma .dl { color: #79c0ff }\n/* LiteralStringDoc */ .chroma .sd { color: #a5d6ff }\n/* LiteralStringDouble */ .chroma .s2 { color: #a5d6ff }\n/* LiteralStringEscape */ .chroma .se { color: #79c0ff }\n/* LiteralStringHeredoc */ .chroma .sh { color: #79c0ff }\n/* LiteralStringInterpol */ .chroma .si { color: #a5d6ff }\n/* LiteralStringOther */ .chroma .sx { color: #a5d6ff }\n/* LiteralStringRegex */ .chroma .sr { color: #79c0ff }\n/* LiteralStringSingle */ .chroma .s1 { color: #a5d6ff }\n/* LiteralStringSymbol */ .chroma .ss { color: #a5d6ff }\n/* LiteralNumber */ .chroma .m { color: #a5d6ff }\n/* LiteralNumberBin */ .chroma .mb { color: #a5d6ff }\n/* LiteralNumberFloat */ .chroma .mf { color: #a5d6ff }\n/* LiteralNumberHex */ .chroma .mh { color: #a5d6ff }\n/* LiteralNumberInteger */ .chroma .mi { color: #a5d6ff }\n/* LiteralNumberIntegerLong */ .chroma .il { color: #a5d6ff }\n/* LiteralNumberOct */ .chroma .mo { color: #a5d6ff }\n/* Operator */ .chroma .o { color: #ff7b72; font-weight: bold }\n/* OperatorWord */ .chroma .ow { color: #ff7b72; font-weight: bold }\n/* Punctuation */ .chroma .p {  }\n/* Comment */ .chroma .c { color: #979fa8; font-style: italic }\n/* CommentHashbang */ .chroma .ch { color: #979fa8; font-style: italic }\n/* CommentMultiline */ .chroma .cm { color: #979fa8; font-style: italic }\n/* CommentSingle */ .chroma .c1 { color: #979fa8; font-style: italic }\n/* CommentSpecial */ .chroma .cs { color: #979fa8; font-weight: bold; font-style: italic }\n/* CommentPreproc */ .chroma .cp { color: #979fa8; font-weight: bold; font-style: italic }\n/* CommentPreprocFile */ .chroma .cpf { color: #979fa8; font-weight: bold; font-style: italic }\n/* Generic */ .chroma .g {  }\n/* GenericDeleted */ .chroma .gd { color: #ffa198; background-color: #490202 }\n/* GenericEmph */ .chroma .ge { font-style: italic }\n/* GenericError */ .chroma .gr { color: #ffa198 }\n/* GenericHeading */ .chroma .gh { color: #79c0ff; font-weight: bold }\n/* GenericInserted */ .chroma .gi { color: #56d364; background-color: #0f5323 }\n/* GenericOutput */ .chroma .go { color: #979fa8 }\n/* GenericPrompt */ .chroma .gp { color: #979fa8 }\n/* GenericStrong */ .chroma .gs { font-weight: bold }\n/* GenericSubheading */ .chroma .gu { color: #79c0ff }\n/* GenericTraceback */ .chroma .gt { color: #ff7b72 }\n/* GenericUnderline */ .chroma .gl { text-decoration: underline }\n/* TextWhitespace */ .chroma .w { color: #999fa8 }\n"
  },
  {
    "path": "assets/scss/components/_syntax-dart.scss",
    "content": "// stylelint-disable annotation-no-unknown\n@import \"syntax-light\";\n\n.bg,\n.chroma,\n.chroma .err {\n    // set to transparent background to avoid rendering issues with example shortcode\n    background-color: transparent if($enable-important-utilities, !important, null);\n}\n\n.chroma {\n    display: flex;\n}\n\n.chroma code {\n    flex: 1;\n}\n\n.codeblock.syntax-highlight, .command.syntax-highlight {\n    border-radius: #{$theme-border-radius};\n}\n\n.syntax-highlight {\n    background-color: var(--bs-light) if($enable-important-utilities, !important, null);\n    overflow-x: auto;\n}\n\n@if $enable-dark-mode {\n    [data-bs-theme=\"dark\"] {\n        @include meta.load-css(syntax-dark);\n\n        .bg,\n        .chroma,\n        .chroma .err {\n            // set to transparent background to avoid rendering issues with example shortcode\n            background-color: transparent if($enable-important-utilities, !important, null);\n        }\n\n        .syntax-highlight {\n            background-color: var(--bs-tertiary-bg) if($enable-important-utilities, !important, null);\n            overflow-x: auto;\n        }\n\n        .bg,\n        .chroma,\n        .chroma .ge,\n        .chroma .gl,\n        .chroma .gs {\n            color: #c9d1d9 if($enable-important-utilities, !important, null);\n        }\n    }\n}\n// stylelint-enable annotation-no-unknown\n"
  },
  {
    "path": "assets/scss/components/_syntax-light.scss",
    "content": "/* Background */ .bg { background-color: #ffffff; }\n/* PreWrapper */ .chroma { background-color: #ffffff; }\n/* Other */ .chroma .x {  }\n/* Error */ .chroma .err { color: #a61717; background-color: #e3d2d2 }\n/* CodeLine */ .chroma .cl {  }\n/* LineLink */ .chroma .lnlinks { outline: none; text-decoration: none; color: inherit }\n/* LineTableTD */ .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; }\n/* LineTable */ .chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; }\n/* LineHighlight */ .chroma .hl { background-color: #ffffcc }\n/* LineNumbersTable */ .chroma .lnt { white-space: pre; -webkit-user-select: none; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7f7f7f }\n/* LineNumbers */ .chroma .ln { white-space: pre; -webkit-user-select: none; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7f7f7f }\n/* Line */ .chroma .line { display: flex; }\n/* Keyword */ .chroma .k { color: #000000; font-weight: bold }\n/* KeywordConstant */ .chroma .kc { color: #000000; font-weight: bold }\n/* KeywordDeclaration */ .chroma .kd { color: #000000; font-weight: bold }\n/* KeywordNamespace */ .chroma .kn { color: #000000; font-weight: bold }\n/* KeywordPseudo */ .chroma .kp { color: #000000; font-weight: bold }\n/* KeywordReserved */ .chroma .kr { color: #000000; font-weight: bold }\n/* KeywordType */ .chroma .kt { color: #445588; font-weight: bold }\n/* Name */ .chroma .n {  }\n/* NameAttribute */ .chroma .na { color: #008080 }\n/* NameBuiltin */ .chroma .nb { color: #006b8f }\n/* NameBuiltinPseudo */ .chroma .bp { color: #999999 }\n/* NameClass */ .chroma .nc { color: #445588; font-weight: bold }\n/* NameConstant */ .chroma .no { color: #008080 }\n/* NameDecorator */ .chroma .nd { color: #3c5d5d; font-weight: bold }\n/* NameEntity */ .chroma .ni { color: #800080 }\n/* NameException */ .chroma .ne { color: #990000; font-weight: bold }\n/* NameFunction */ .chroma .nf { color: #990000; font-weight: bold }\n/* NameFunctionMagic */ .chroma .fm {  }\n/* NameLabel */ .chroma .nl { color: #990000; font-weight: bold }\n/* NameNamespace */ .chroma .nn { color: #555555 }\n/* NameOther */ .chroma .nx {  }\n/* NameProperty */ .chroma .py {  }\n/* NameTag */ .chroma .nt { color: #000080 }\n/* NameVariable */ .chroma .nv { color: #008080 }\n/* NameVariableClass */ .chroma .vc { color: #008080 }\n/* NameVariableGlobal */ .chroma .vg { color: #008080 }\n/* NameVariableInstance */ .chroma .vi { color: #008080 }\n/* NameVariableMagic */ .chroma .vm {  }\n/* Literal */ .chroma .l {  }\n/* LiteralDate */ .chroma .ld {  }\n/* LiteralString */ .chroma .s { color: #dd1144 }\n/* LiteralStringAffix */ .chroma .sa { color: #dd1144 }\n/* LiteralStringBacktick */ .chroma .sb { color: #dd1144 }\n/* LiteralStringChar */ .chroma .sc { color: #dd1144 }\n/* LiteralStringDelimiter */ .chroma .dl { color: #dd1144 }\n/* LiteralStringDoc */ .chroma .sd { color: #dd1144 }\n/* LiteralStringDouble */ .chroma .s2 { color: #dd1144 }\n/* LiteralStringEscape */ .chroma .se { color: #dd1144 }\n/* LiteralStringHeredoc */ .chroma .sh { color: #dd1144 }\n/* LiteralStringInterpol */ .chroma .si { color: #dd1144 }\n/* LiteralStringOther */ .chroma .sx { color: #dd1144 }\n/* LiteralStringRegex */ .chroma .sr { color: #009926 }\n/* LiteralStringSingle */ .chroma .s1 { color: #dd1144 }\n/* LiteralStringSymbol */ .chroma .ss { color: #990073 }\n/* LiteralNumber */ .chroma .m { color: #007a7a }\n/* LiteralNumberBin */ .chroma .mb { color: #007a7a }\n/* LiteralNumberFloat */ .chroma .mf { color: #007a7a }\n/* LiteralNumberHex */ .chroma .mh { color: #007a7a }\n/* LiteralNumberInteger */ .chroma .mi { color: #007a7a }\n/* LiteralNumberIntegerLong */ .chroma .il { color: #007a7a }\n/* LiteralNumberOct */ .chroma .mo { color: #007a7a }\n/* Operator */ .chroma .o { color: #000000; font-weight: bold }\n/* OperatorWord */ .chroma .ow { color: #000000; font-weight: bold }\n/* Punctuation */ .chroma .p {  }\n/* Comment */ .chroma .c { color: #6d6d5d; font-style: italic }\n/* CommentHashbang */ .chroma .ch { color: #6d6d5d; font-style: italic }\n/* CommentMultiline */ .chroma .cm { color: #6d6d5d; font-style: italic }\n/* CommentSingle */ .chroma .c1 { color: #6d6d5d; font-style: italic }\n/* CommentSpecial */ .chroma .cs { color: #999999; font-weight: bold; font-style: italic }\n/* CommentPreproc */ .chroma .cp { color: #999999; font-weight: bold; font-style: italic }\n/* CommentPreprocFile */ .chroma .cpf { color: #999999; font-weight: bold; font-style: italic }\n/* Generic */ .chroma .g {  }\n/* GenericDeleted */ .chroma .gd { color: #000000; background-color: #ffdddd }\n/* GenericEmph */ .chroma .ge { color: #000000; font-style: italic }\n/* GenericError */ .chroma .gr { color: #aa0000 }\n/* GenericHeading */ .chroma .gh { color: #999999 }\n/* GenericInserted */ .chroma .gi { color: #000000; background-color: #ddffdd }\n/* GenericOutput */ .chroma .go { color: #888888 }\n/* GenericPrompt */ .chroma .gp { color: #555555 }\n/* GenericStrong */ .chroma .gs { font-weight: bold }\n/* GenericSubheading */ .chroma .gu { color: #aaaaaa }\n/* GenericTraceback */ .chroma .gt { color: #aa0000 }\n/* GenericUnderline */ .chroma .gl { text-decoration: underline }\n/* TextWhitespace */ .chroma .w { color: #bbbbbb }\n"
  },
  {
    "path": "assets/scss/components/_syntax.scss",
    "content": "// stylelint-disable annotation-no-unknown\n@import \"syntax-light\";\n\n.bg,\n.chroma,\n.chroma .err {\n    // set to transparent background to avoid rendering issues with example shortcode\n    background-color: transparent if($enable-important-utilities, !important, null);\n}\n\n.chroma {\n    display: flex;\n}\n\n.chroma code {\n    flex: 1;\n}\n\n.codeblock.syntax-highlight, .command.syntax-highlight {\n    border-radius: #{$theme-border-radius};\n}\n\n.syntax-highlight {\n    background-color: var(--bs-light) if($enable-important-utilities, !important, null);\n    overflow-x: auto;\n}\n\n@if $enable-dark-mode {\n    [data-bs-theme=\"dark\"] {\n        @import \"syntax-dark\"; // stylelint-disable-line no-invalid-position-at-import-rule\n\n        .bg,\n        .chroma,\n        .chroma .err {\n            // set to transparent background to avoid rendering issues with example shortcode\n            background-color: transparent if($enable-important-utilities, !important, null);\n        }\n\n        .syntax-highlight {\n            background-color: var(--bs-tertiary-bg) if($enable-important-utilities, !important, null);\n            overflow-x: auto;\n        }\n\n        .bg,\n        .chroma,\n        .chroma .ge,\n        .chroma .gl,\n        .chroma .gs {\n            color: #c9d1d9 if($enable-important-utilities, !important, null);\n        }\n    }\n}\n// stylelint-enable annotation-no-unknown\n"
  },
  {
    "path": "assets/scss/components/_table.scss",
    "content": ".datatable-container {\n    border-bottom: none if($enable-important-utilities, !important, null);\n}\n\n.datatable-bottom {\n    padding-top: 0 if($enable-important-utilities, !important, null);\n}\n\n.datatable-sorter {\n    padding-left: 0;\n    padding-right: 1rem;\n}\n\n.table-border-bottom-wrap {\n    border-bottom-style: none !important\n}\n\n@if $enable-dark-mode {\n    @include color-mode(dark) {\n        .table-striped, .table-striped-columns {\n            --bs-table-striped-bg: var(--bs-tertiary-bg);\n            --bs-table-striped-color: var(--bs-body-color);\n        }\n\n        .table-hover {\n            --bs-table-hover-bg: var(--bs-tertiary-bg);\n            --bs-table-striped-color: var(--bs-body-color);\n        }\n\n        .datatable-pagination-list-item {\n            &:hover,\n            &:focus,\n            &.datatable-active {\n                color: var(--bs-body-bg) !important;\n            }\n        } \n    }\n}\n"
  },
  {
    "path": "assets/scss/components/_testimonial.scss",
    "content": ".testimonial-img {\n    height: 10vw;\n    width: 10vw;\n    background-color: var(--#{$prefix}body-bg);\n}\n\n.testimonial-logo {\n    width: 20vw;\n}\n\n@include media-breakpoint-up(md) {\n    .testimonial-img {\n        height: 5vw;\n        width: 5vw;\n    }\n\n    .testimonial-logo {\n        width: 10vw;\n    }\n}\n"
  },
  {
    "path": "assets/scss/components/_timeline.scss",
    "content": "// scss-docs-start timeline\n$connector-radius: 0.8rem;\n$semi-circle-radius: 8rem;\n$semi-circle-border: 0.2rem;\n\n:root {\n    --timeline-highlight: var(--bs-primary);\n    --timeline-icon-radius: #{$semi-circle-radius};\n    --timeline-offset: 50%;\n    --timeline-connector-bg: var(--bs-body-bg);\n}\n\n@each $state in map-keys($theme-colors) {\n    .timeline-#{$state} {\n        --timeline-highlight: var(--#{$prefix}#{$state});\n    }\n\n    .timeline-bg-#{$state} {\n        --timeline-connector-bg: var(--#{$prefix}#{$state});\n    }\n\n    .timeline-bg-#{$state}-subtle {\n        --timeline-connector-bg: var(--#{$prefix}#{$state}-bg-subtle);\n    }\n}\n\n// scss-docs-end timeline\n\n.timeline-container {\n    border-radius: #{$theme-border-radius}; \n}\n\n.timeline, .timeline-sm {\n    position: relative;\n}\n\n.timeline-sm {\n    --timeline-icon-radius: calc(#{$semi-circle-radius} / 2.4);\n    --timeline-offset: 25%\n}\n\n@include media-breakpoint-up(sm) {\n    .timeline-sm {\n        --timeline-icon-radius: calc(#{$semi-circle-radius} / 2);\n    }\n}\n  \n.timeline::before, .timeline-sm::before {\n    content: \"\";\n    width: 2 * $semi-circle-border;\n    margin: 0 auto;\n    background: var(--bs-body-color);\n    position: absolute;\n    inset: 0;\n}\n\n.timeline-sm::before {\n    margin: 0 calc(var(--timeline-offset) - #{$semi-circle-border});\n}\n\n.timeline-semi-circle-start, .timeline-semi-circle-end {\n    width: var(--timeline-icon-radius);\n    height: var(--timeline-icon-radius);\n    border-radius: 100%;\n    position: relative;\n}\n\n.timeline-semi-circle-start {\n    left: -$semi-circle-border;\n}\n\n.timeline-semi-circle-end {\n    left: $semi-circle-border;\n}\n\n.timeline-semi-circle-start::before {\n    content: \"\";\n    width: var(--timeline-icon-radius);\n    height: var(--timeline-icon-radius);\n    border-radius: 100%;\n    border: $semi-circle-border solid;\n    position: absolute;\n    border-color: transparent var(--timeline-highlight) var(--timeline-highlight) var(--timeline-highlight);\n    transform: rotate(-90deg);\n}\n\n.timeline-semi-circle-start::after {\n    content: \"\";\n    left: 0;\n    top: 0;\n    width: var(--timeline-icon-radius);\n    height: var(--timeline-icon-radius);\n    border-radius: 100%;\n    border: $semi-circle-border solid;\n    position: absolute;\n    border-color: var(--timeline-highlight) var(--timeline-highlight) var(--timeline-highlight) transparent;\n    transform: rotate(-45deg);\n}\n\n.timeline-semi-circle-end::before {\n    content: \"\";\n    width: var(--timeline-icon-radius);\n    height: var(--timeline-icon-radius);\n    border-radius: 100%;\n    border: $semi-circle-border solid;\n    position: absolute;\n    border-color: transparent var(--timeline-highlight) var(--timeline-highlight) var(--timeline-highlight);\n    transform: rotate(-225deg);\n}\n\n.timeline-semi-circle-end::after {\n    content: \"\";\n    left: 0;\n    top: 0;\n    width: var(--timeline-icon-radius);\n    height: var(--timeline-icon-radius);\n    border-radius: 100%;\n    border: $semi-circle-border solid;\n    position: absolute;\n    border-color: var(--timeline-highlight) var(--timeline-highlight) var(--timeline-highlight) transparent;\n    transform: rotate(-180deg);\n}\n\n.timeline-description-text-start {\n    border-bottom: $semi-circle-border solid var(--timeline-highlight);\n    margin-right: 2 * $connector-radius;\n}\n\n.timeline-description-text-end {\n    border-bottom: $semi-circle-border solid var(--timeline-highlight);\n    margin-left: 2 * $connector-radius;\n}\n\n.timeline-panel-start, .timeline-panel-end, .timeline-connector-start, .timeline-connector-end {\n    top: calc(var(--timeline-icon-radius) / 2);\n    position: relative;\n    width: calc(var(--timeline-icon-radius) / 2);\n    height: calc($semi-circle-border + var(--timeline-icon-radius) / 2);\n    border: $semi-circle-border solid var(--timeline-highlight);\n    border-bottom: none;\n    border-right: none;\n    border-left: none;\n}\n\n.timeline-panel-start {\n    top: 50%;\n    right: 50%;\n    position: absolute;\n    width: calc(var(--timeline-icon-radius) * 2);\n    width: 2 * $connector-radius;\n    height: 50%;\n    border-top: $semi-circle-border solid var(--timeline-highlight);\n    border-left: $semi-circle-border solid var(--timeline-highlight);\n}\n\n.timeline-panel-end {\n    top: 50%;\n    position: absolute;\n    width: calc(var(--timeline-icon-radius) * 2);\n    width: 2 * $connector-radius;\n    height: 50%;\n    border-top: $semi-circle-border solid var(--timeline-highlight);\n    border-right: $semi-circle-border solid var(--timeline-highlight);\n}\n\n.timeline-dot::after {\n    display: inline-block;\n    content: \"\";\n    position: absolute;\n    top: 50%;\n    left: var(--timeline-offset);\n    margin: (-$connector-radius) 0 0 (-$connector-radius);\n    width: 2 * $connector-radius;\n    height: 2 * $connector-radius;\n    border-radius: 100%;\n    border: ($semi-circle-border * 1.5) solid var(--timeline-connector-bg);\n    color: var(--timeline-highlight);\n    background: var(--timeline-highlight);\n}\n\n// Compact start-aligned timeline (layout=\"start\")\n.timeline-start {\n    list-style: none;\n    padding-inline-start: 1rem;\n    margin: 0;\n    position: relative;\n\n    &::before {\n        content: \"\";\n        position: absolute;\n        inset-inline-start: 0;\n        top: 0.4rem;\n        bottom: 0.4rem;\n        width: $semi-circle-border;\n        background: var(--bs-border-color);\n    }\n\n    li {\n        position: relative;\n        padding-inline-start: 1rem;\n        margin-bottom: 0.75rem;\n\n        &:last-child {\n            margin-bottom: 0;\n        }\n\n        &::before {\n            content: \"\";\n            position: absolute;\n            inset-inline-start: calc(#{$semi-circle-border} / 2 - 1.2rem);\n            top: 0.4rem;\n            width: 0.4rem;\n            height: 0.4rem;\n            border-radius: 100%;\n            background: var(--bs-primary);\n        }\n    }\n}\n"
  },
  {
    "path": "assets/scss/components/_toast.scss",
    "content": ".toast {\n    border-radius: #{$theme-border-radius};\n    overflow: hidden;\n}\n"
  },
  {
    "path": "assets/scss/components/_toc.scss",
    "content": "//\n// Table of contents sidebar & drop-down panel\n//\n// scss-docs-start toc\n.toc-sidebar {\n    top: calc(var(--navbar-offset) + 1rem);\n    max-height: calc(100vh - var(--navbar-offset));\n    overflow-y: auto;\n    right: 0;\n    z-index: 2;\n}\n\n// scss-docs-end toc\n\n.toc nav {\n    font-size: 0.875rem;\n    margin-bottom: -0.875rem;\n}\n\n.toc nav ul {\n    padding-left: 0;\n    list-style: none;\n}\n\n.toc nav ul ul {\n    padding-left: 1rem;\n    margin-top: 0.25rem;\n}\n\n.toc nav li {\n    margin-bottom: 0.25rem;\n}\n\n.toc nav a {\n    color: inherit;\n\n    &:hover {\n        color: var(--bs-primary);\n    }\n}\n\n.toc nav a:not(:hover) {\n    text-decoration: none;\n}\n\n.toc nav a code {\n    font: inherit;\n}\n\n#toc-collapse {\n    border-color: var(--bs-secondary-color) !important;\n    border-radius: 0 0 var(--bs-border-radius) var(--bs-border-radius) !important;\n    margin-top: -1.5rem;\n    padding-top: 1.5rem !important;\n}\n\n.toc-button {\n    --bs-btn-hover-color: var(--bs-primary);\n    --bs-btn-hover-bg: var(--bs-body-bg);\n    --bs-btn-hover-border-color: var(--bs-primary);\n    --bs-btn-active-color: var(--bs-primary);\n    --bs-btn-active-bg: var(--bs-body-bg);\n    --bs-btn-active-border-color: var(--bs-primary);\n\n    background-color: var(--#{$prefix}body-bg) !important;\n\n    &.active,\n    &:hover,\n    &:focus {\n        color: var(--bs-primary);\n        border-color: var(--bs-primary);\n        box-shadow: 0 0 0 4px var(--bs-primary-border-subtle);\n        outline: none;\n    }\n}\n\n.btn-link.toc-item {\n    font-size: inherit;\n}\n\n#btnTOCShowMore {\n    padding-top: 0.875rem;\n}\n\na.toc-item {\n    display: block;\n}\n\na.toc-level-1 {\n    margin-left: 0;\n}\n\na.toc-level-2 {\n    margin-left: 1em;\n}\n\na.toc-level-3 {\n    margin-left: 2em;\n}\n\na.toc-level-4 {\n    margin-left: 3em;\n}\n\na.toc-level-5 {\n    margin-left: 4em;\n}\n\na.toc-level-6 {\n    margin-left: 5em;\n}\n\n\n@if $enable-dark-mode {\n    [data-bs-theme=\"dark\"] {\n        .toc-button {\n            --bs-btn-color: var(--bs-body-color);\n            --bs-btn-border-color: var(--bs-body-color);\n\n            &:hover {\n                background-color: transparent;\n            }\n        }\n\n        #toc-collapse {\n            border-color: var(--bs-body-color) !important;\n        }\n\n        .toc nav a {\n            color: var(--bs-body-color);\n\n            &:hover {\n                color: white;\n            }\n        }\n    }\n}\n\n.section-menu > .nav-link.active, .section-menu > .nav-link:hover {\n    color: var(--bs-primary);\n}\n"
  },
  {
    "path": "assets/scss/components/_tooltip.scss",
    "content": ".btn-tooltip a {\n    text-decoration: none;\n}\n\n.btn-tooltip a[href] {\n    color: var(--bs-link-color) !important;\n    text-decoration-color: var(--bs-link-color) !important;\n}"
  },
  {
    "path": "assets/scss/components/_video.scss",
    "content": ".video-embedded {\n    position: relative;\n    padding-bottom: 56.25%;\n    height: 0;\n    overflow: hidden;\n    border-radius: #{$theme-border-radius};\n}\n\n.video-embedded > iframe {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    border: 0;\n}\n\n// Adapted from https://github.com/gohugoio/hugo/tpl/tplimpl/embedded/templates/shortcodes/vimeo_simple.html\n.__h_video {\n    position: relative;\n    padding-bottom: 56.23%;\n    height: 0;\n    overflow: hidden;\n    width: 100%;\n    background: #000;\n}\n\n.__h_video img {\n    width: 100%;\n    height: auto;\n    color: #000;\n}\n\n.__h_video .play {\n    height: 72px;\n    width: 72px;\n    left: 50%;\n    top: 50%;\n    margin-left: -36px;\n    margin-top: -36px;\n    position: absolute;\n    cursor: pointer;\n}\n\n.video {\n    position: relative;\n    padding-bottom: 56.25%;\n    height: 0;\n    overflow: hidden;\n}\n\n.video iframe {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    border: 0;\n}\n"
  },
  {
    "path": "assets/scss/helpers/_colored-links.scss",
    "content": "// scss-docs-start colored-links\n$custom-colors: (\n    \"primary\": \"light\", \n    \"secondary\": \"light\", \n    \"success\": \"light\", \n    \"danger\": \"light\", \n    \"dark\": \"light\", \n    \"black\": \"light\",\n    \"info\": \"dark\", \n    \"warning\": \"dark\", \n    \"light\": \"dark\", \n    \"white\": \"dark\",\n    \"body\": \"adaptive\",\n    \"body-tertiary\": \"adaptive\"\n);\n\n@each $color, $value in $custom-colors {\n    $main-color: var(--bs-body-color);\n    $emphasize-color: var(--bs-secondary-color);\n\n    @if $value == \"light\" {\n        $main-color: $white;\n        $emphasize-color: shade-color($main-color, $link-shade-percentage);\n    } @else if $value == \"dark\" {\n        $main-color: $black;\n        $emphasize-color: tint-color($main-color, $link-shade-percentage);\n    }\n\n    .link-bg-#{$color} {\n        color: $main-color if($enable-important-utilities, !important, null); \n\n        &:hover,\n        &:focus {\n            color: $emphasize-color if($enable-important-utilities, !important, null);\n        }\n    }\n}\n\n// scss-docs-end colored-links\n"
  },
  {
    "path": "assets/scss/helpers/_display.scss",
    "content": ".hidden {\n    display: none;\n}\n\n// stylelint-disable annotation-no-unknown\n\n// scss-docs-start display-color\n.d-none-light, .d-none-inline-light {\n    display: none if($enable-important-utilities, !important, null); \n}\n\n.d-none-dark {\n    display: block if($enable-important-utilities, !important, null);\n}\n\n.d-none-inline-dark {\n    display: inline if($enable-important-utilities, !important, null);\n}\n\n@if $enable-dark-mode {\n    @include color-mode(dark) {\n        .d-none-light {\n            display: block if($enable-important-utilities, !important, null);\n        }\n\n        .d-none-inline-light {\n            display: inline if($enable-important-utilities, !important, null);\n        }\n\n        .d-none-dark, .d-none-inline-dark {\n            display: none if($enable-important-utilities, !important, null);\n        }\n    }\n}\n\n// scss-docs-end display-color\n\n// stylelint-enable annotation-no-unknown\n"
  },
  {
    "path": "assets/scss/layouts/_reboot.scss",
    "content": "pre {\n    padding: $spacer;\n    margin-bottom: 0;\n}\n"
  },
  {
    "path": "assets/scss/layouts/_type.scss",
    "content": "//\n// Headings\n//\nh1 {\n    margin-top: $spacer * 2.5;\n    scroll-margin-top: var(--navbar-offset);\n}\n\nh2 {\n    margin-top: $spacer * 2;\n    scroll-margin-top: var(--navbar-offset);\n}\n\nh3 {\n    margin-top: $spacer * 1.75;\n    scroll-margin-top: var(--navbar-offset);\n}\n\nh4 {\n    margin-top: $spacer * 1.5;\n    scroll-margin-top: var(--navbar-offset);\n}\n\nh5 {\n    margin-top: $spacer * 1.25;\n    scroll-margin-top: var(--navbar-offset);\n}\n\nh6 {\n    margin-top: $spacer;\n    scroll-margin-top: var(--navbar-offset);\n}\n\n.display-1, .display-2, .display-3, .display-4, .display-5, .display-6 {\n    scroll-margin-top: var(--navbar-offset);\n}\n"
  },
  {
    "path": "assets/scss/theme/_variables.scss",
    "content": "// Placeholder to quickly add your own theme variable overrides\n// The file is included at the beginning of the build pipeline\n"
  },
  {
    "path": "assets/scss/theme/base.scss",
    "content": "// Placeholder for themes extending the core Hinode theme\n// The file is included last in the build pipeline, but prior to theme.scss\n"
  },
  {
    "path": "assets/scss/theme/fonts.scss",
    "content": "/*!\n * Copyright (c) 2016-2020 The Inter Project Authors.\n * \"Inter\" is trademark of Rasmus Andersson.\n * https://github.com/rsms/inter\n\n * This Font Software is licensed under the SIL Open Font License, Version 1.1.\n * This license is copied below, and is also available with a FAQ at:\n * http://scripts.sil.org/OFL\n */\n\n/* inter-200 - latin */\n@font-face {\n    font-display: block; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */\n    font-family: 'Inter';\n    font-style: normal;\n    font-weight: 200;\n    src: url('../fonts/inter-v12-latin-200.eot'); /* IE9 Compat Modes */\n    src: url('../fonts/inter-v12-latin-200.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */\n         url('../fonts/inter-v12-latin-200.woff2') format('woff2'), /* Super Modern Browsers */\n         url('../fonts/inter-v12-latin-200.woff') format('woff'), /* Modern Browsers */\n         url('../fonts/inter-v12-latin-200.ttf') format('truetype'), /* Safari, Android, iOS */\n         url('../fonts/inter-v12-latin-200.svg#Inter') format('svg'); /* Legacy iOS */\n  }\n  /* inter-300 - latin */\n  @font-face {\n    font-display: block; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */\n    font-family: 'Inter';\n    font-style: normal;\n    font-weight: 300;\n    src: url('../fonts/inter-v12-latin-300.eot'); /* IE9 Compat Modes */\n    src: url('../fonts/inter-v12-latin-300.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */\n         url('../fonts/inter-v12-latin-300.woff2') format('woff2'), /* Super Modern Browsers */\n         url('../fonts/inter-v12-latin-300.woff') format('woff'), /* Modern Browsers */\n         url('../fonts/inter-v12-latin-300.ttf') format('truetype'), /* Safari, Android, iOS */\n         url('../fonts/inter-v12-latin-300.svg#Inter') format('svg'); /* Legacy iOS */\n  }\n  /* inter-regular - latin */\n  @font-face {\n    font-display: block; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */\n    font-family: 'Inter';\n    font-style: normal;\n    font-weight: 400;\n    src: url('../fonts/inter-v12-latin-regular.eot'); /* IE9 Compat Modes */\n    src: url('../fonts/inter-v12-latin-regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */\n         url('../fonts/inter-v12-latin-regular.woff2') format('woff2'), /* Super Modern Browsers */\n         url('../fonts/inter-v12-latin-regular.woff') format('woff'), /* Modern Browsers */\n         url('../fonts/inter-v12-latin-regular.ttf') format('truetype'), /* Safari, Android, iOS */\n         url('../fonts/inter-v12-latin-regular.svg#Inter') format('svg'); /* Legacy iOS */\n  }\n  /* inter-600 - latin */\n  @font-face {\n    font-display: block; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */\n    font-family: 'Inter';\n    font-style: normal;\n    font-weight: 600;\n    src: url('../fonts/inter-v12-latin-600.eot'); /* IE9 Compat Modes */\n    src: url('../fonts/inter-v12-latin-600.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */\n         url('../fonts/inter-v12-latin-600.woff2') format('woff2'), /* Super Modern Browsers */\n         url('../fonts/inter-v12-latin-600.woff') format('woff'), /* Modern Browsers */\n         url('../fonts/inter-v12-latin-600.ttf') format('truetype'), /* Safari, Android, iOS */\n         url('../fonts/inter-v12-latin-600.svg#Inter') format('svg'); /* Legacy iOS */\n  }"
  },
  {
    "path": "assets/scss/theme/theme.scss",
    "content": "// Placeholder to quickly add your own styles\n// The file is included last in the build pipeline\n"
  },
  {
    "path": "assets/scss/vendor/.gitkeep",
    "content": ""
  },
  {
    "path": "commitlint.config.js",
    "content": "module.exports = {extends: ['@commitlint/config-conventional']}\n"
  },
  {
    "path": "config/_default/hugo.toml",
    "content": "# toml-docs-start main\ntitle = \"Hinode\"\ncopyright = \"Copyright © 2026 Hinode Team\"\nenableGitInfo = true\n# toml-docs-end main\n\n# additional settings\nbaseURL = \"https://example.com/\"\ncanonifyURLs = false\nenableEmoji = true\nenableRobotsTXT = true\nenableInlineShortcodes = true\nsummaryLength = 20\n\n# prevent build failures when using Hugo's Instagram shortcode due to deprecated Instagram API.\n# See https://github.com/gohugoio/hugo/issues/7228#issuecomment-714490456\nignoreErrors = [\"error-remote-getjson\"]\n\n# toml-docs-start timeout\ntimeout = \"180s\"\n# toml-docs-end timeout\n\n# toml-docs-start language\nlanguageCode = \"en-us\"\ndefaultContentLanguage = \"en\"\ndefaultContentLanguageInSubdir = false\n# toml-docs-end language\n\n# toml-docs-start headers\n[outputFormats]\n  [outputFormats.server]\n    mediaType = \"application/toml\"\n    baseName = \"server\"\n    isPlainText = true\n    notAlternative = true\n    permalinkable = true\n    root = true\n  [outputFormats.netlify]\n    mediaType = \"application/toml\"\n    baseName = \"netlify\"\n    isPlainText = true\n    notAlternative = true\n    permalinkable = true\n    root = true\n# toml-docs-end headers\n\n  [outputFormats.XML]\n    isPlainText = false\n    mediaType = \"application/xml\"\n    isHtml = false\n    noUgly = true\n    permalinkable = false\n    name = \"xml\"\n\n# toml-docs-start redirect\n  [outputFormats.REDIR]\n    mediaType = \"text/netlify\"\n    baseName = \"_redirects\"\n    isPlainText = true\n    notAlternative = true\n\n[mediaTypes.\"text/netlify\"]\ndelimiter = \"\"\n# toml-docs-end redirect\n\n# toml-docs-start outputs\n[outputs]\nhome = [\"HTML\", \"RSS\", \"REDIR\", \"netlify\", \"server\"]\n# toml-docs-end outputs\n\n# toml-docs-start build\n[build]\n  writeStats = true\n# toml-docs-end build\n  \n[taxonomies]\n  tag = 'tags'\n\n[pagination]\n  pagerSize = 9\n\n[privacy]\n  [privacy.vimeo]\n    disabled = false\n    simple = true\n\n  [privacy.x]\n    disabled = false\n    enableDNT = true\n    simple = true\n\n  [privacy.instagram]\n    disabled = false\n    simple = true\n\n  [privacy.youtube]\n    disabled = false\n    privacyEnhanced = true\n\n[services]\n  [services.instagram]\n    disableInlineCSS = true\n  [services.x]\n    disableInlineCSS = true\n  [services.googleAnalytics]\n    # ID = \"G-xxxxxxxxxx\"\n\n[minify]\n  [minify.tdewolff.js]\n    keepVarNames = true\n    precision = 0\n    version = 2022\n  [minify.tdewolff.html]\n    keepWhitespace = true\n\n[module]\n  [module.hugoVersion]\n    extended = true\n    min = \"0.146.0\"\n  [[module.mounts]]\n    source = \"archetypes\"\n    target = \"archetypes\"\n  [[module.mounts]]\n    source = \"assets\"\n    target = \"assets\"\n  [[module.mounts]]\n    source = \"content\"\n    target = \"content\"\n  [[module.mounts]]\n    source = \"data\"\n    target = \"data\"\n  [[module.mounts]]\n    source = \"i18n\"\n    target = \"i18n\"\n  [[module.mounts]]\n    source = \"layouts\"\n    target = \"layouts\"\n  [[module.mounts]]\n    source = \"static\"\n    target = \"static\"\n  [[module.mounts]]\n    source = \"netlify.toml\"\n    target = \"assets/config/netlify.toml\"\n# toml-docs-start modules\n  [[module.imports]]\n    path = \"github.com/gethinode/mod-bootstrap\"\n  [[module.imports]]\n    path = \"github.com/gethinode/mod-csp\"\n  [[module.imports]]\n    path = \"github.com/gethinode/mod-flexsearch/v4\"\n  [[module.imports]]\n    path = \"github.com/gethinode/mod-fontawesome/v5\"\n  [[module.imports]]\n    path = \"github.com/gethinode/mod-google-analytics/v2\"\n  [[module.imports]]\n    path = \"github.com/gethinode/mod-katex\"\n  [[module.imports]]\n    path = \"github.com/gethinode/mod-leaflet/v2\"\n  [[module.imports]]\n    path = \"github.com/gethinode/mod-lottie/v2\"\n  [[module.imports]]\n    path = \"github.com/gethinode/mod-mermaid/v4\"\n  [[module.imports]]\n    path = \"github.com/gethinode/mod-simple-datatables/v3\"\n  [[module.imports]]\n    path = \"github.com/gethinode/mod-utils/v5\"\n# toml-docs-end modules\n\n# toml-docs-start segments\n[segments]\n  [segments.headers]\n    [[segments.headers.includes]]\n       kind = '{home}'\n       output = '{netlify,server}'\n# toml-docs-end segments\n"
  },
  {
    "path": "config/_default/languages.toml",
    "content": "# toml-docs-start lang-main\n[en]\n    languageName = \"English\"\n    contentDir = \"content\"\n    weight = 1\n# toml-docs-end lang-main\n# toml-docs-start lang-param\n    [en.params.head]\n        tagline = \"A Hugo Theme\"\n    [en.params.social]\n        title = \"Follow me\"\n        caption = \"I work on everything coding and tweet developer memes\"\n    [en.params.footer]\n        # license = \"Licensed under Creative Commons (<a href='https://creativecommons.org/licenses/by-nc-sa/4.0/' class='link-secondary' target='_blank' rel='noopener noreferrer nofollow'>CC BY-NC-SA 4.0</a>).\"\n# toml-docs-end lang-param\n"
  },
  {
    "path": "config/_default/markup.toml",
    "content": "defaultMarkdownHandler = \"goldmark\"\n\n[highlight]\n    anchorLineNos = false\n    codeFences = true\n    guessSyntax = true\n    hl_Lines = \"\"\n    lineAnchors = \"\"\n    lineNoStart = 1\n    lineNos = false\n    lineNumbersInTable = false\n    noClasses = false\n    tabWidth = 2\n    ## Update the 'create:syntax' command in package.json to modify the style\n    ## The first two lines have been modified to remove the background color\n    # style = \"monokailight\" \n\n[goldmark]\n    [goldmark.extensions]\n        definitionList = true\n        footnote = true\n        linkify = true\n        strikethrough = true\n        table = true\n        taskList = true\n        typographer = true\n    [goldmark.extensions.passthrough]\n        enable = true\n    [goldmark.extensions.passthrough.delimiters]\n        block = [['\\[', '\\]'], ['$$', '$$']]\n        inline = [['\\(', '\\)'], ['$', '$']]\n    [goldmark.parser]\n        autoHeadingID = true\n        autoHeadingIDType = 'github'\n        wrapStandAloneImageWithinParagraph = false\n    [goldmark.parser.attribute]\n        block = true\n    [goldmark.renderer]\n        hardWraps = false\n        unsafe = false\n        xhtml = false"
  },
  {
    "path": "config/_default/menus/menus.en.toml",
    "content": "[[main]]\n  name = \"Home\"\n  pageRef = \"/\"\n  weight = 10\n\n[[main]]\n  name = \"Tags\"\n  pageRef = \"/tags\"\n  weight = 20\n\n[[social]]\n  name = \"LinkedIn\"\n  pre = \"fab linkedin\"\n  url = \"https://linkedin.com/\"\n  weight = 10\n\n[[social]]\n  name = \"GitHub\"\n  pre = \"fab fa-github\"\n  url = \"https://github.com/\"\n  weight = 20\n\n[[social]]\n  name = \"Medium\"\n  pre = \"fab medium\"\n  url = \"https://medium.com/\"\n  weight = 30\n"
  },
  {
    "path": "config/_default/params.toml",
    "content": "# toml-docs-start main\n[main]\n    separator = \"-\"\n    description = \"Hinode is a clean documentation and blog theme for your Hugo site based on Bootstrap 5.\"\n    enableLanguageSelectionStorage = false\n    canonifyAssetsURLs = false\n    endorse = true\n    footerBelowFold = false\n    loading = \"lazy\"\n    breakpoint = \"md\"\n    titleCase = false\n    [main.padding]\n        x = 4\n        y = 4\n    [main.internalLinks]\n        validate = true\n        pretty = false\n    [main.externalLinks]\n        cue = false\n        tab = false\n    [main.build]\n        transpiler = \"dartsass\"\n        silenceDeprecations = true\n    [main.colorMode]\n        enabled = true\n        modes = [\"light\", \"dark\"]\n        toggle = false\n    [main.cards]\n        linkIcon = false\n# toml-docs-end main\n\n# toml-docs-start icons\n[icons]\n    # Color mode toggle\n    colorModeLight       = \"fas sun\"\n    colorModeDark        = \"fas moon\"\n    # Navbar\n    navbarLanguage       = \"fas globe\"\n    navbarOverflow       = \"fas ellipsis\"\n    navbarVersionCheck   = \"fas check\"\n    # Pagination\n    paginationFirst      = \"fas angles-left\"\n    paginationPrev       = \"fas angle-left\"\n    paginationNext       = \"fas angle-right\"\n    paginationLast       = \"fas angles-right\"\n    # Other navigation\n    breadcrumbBack       = \"fas angle-left\"\n    pageNavPrev          = \"fas arrow-left\"\n    pageNavNext          = \"fas arrow-right\"\n    # Content\n    tocSort              = \"fas sort\"\n    cardReadMore         = \"fas chevron-right\"\n    cardLinkIcon         = \"fas arrow-right\"\n    externalLink         = \"fas up-right-from-square\"\n    testimonialNext      = \"fas chevron-right\"\n    testimonialQuote     = \"fas quote-right\"\n    headingAnchor        = \"fas link\"\n    notFoundPage         = \"fas link-slash\"\n    sharingWebshare      = \"fas share-nodes\"\n    sharingDownload      = \"fas download\"\n    # Sidebar\n    sidebarCollapse      = \"fas angles-left\"\n    sidebarSecondary     = \"fas angle-down\"\n    # Form\n    formSubmitButton     = \"fa paper-plane\"\n    formSubmittedIcon    = \"fa envelope\"\n    [icons.admonition]\n        note       = \"fas circle-info\"\n        info       = \"fas circle-info\"\n        tip        = \"fa lightbulb\"\n        important  = \"fas exclamation\"\n        warning    = \"fas triangle-exclamation\"\n        caution    = \"fa hand\"\n    [icons.release]\n        deprecated = \"fas trash-can\"\n        feature    = \"fas rocket\"\n# toml-docs-end icons\n\n# toml-docs-start images\n[images]\n    [images.cloudinary]\n        host = \"cloudinary\"\n    [images.imagekit]\n        host = \"imagekit\"\n    [images.imgix]\n        host = \"imgix\"\n# toml-docs-end images\n\n# toml-docs-start videos\n[videos]\n    [videos.cloudinary]\n        host = \"cloudinary\"\n        account = \"demo\"\n    [videos.vimeo]\n        host = \"vimeo\"\n    [videos.youtube]\n        host = \"youtube\"\n# toml-docs-end videos\n\n[dam]\n    videoCodecs = [\n        \"webm/vp9\",\n        \"mp4/h265\",\n        \"mp4\"\n    ]\n\n# toml-docs-start debugging\n[debugging]\n    showJS = false\n    showSCSS = false\n    purgeHTMLComments = false\n    includeSVGOrigin = true\n# toml-docs-end debugging\n\n# toml-docs-start docs\n[docs]\n    github = \"https://github.com/gethinode/hinode\"\n    release = \"https://github.com/gethinode/hinode/releases/tag/\"\n    checkVersion = false\n# toml-docs-end docs\n\n# toml-docs-start home\n[home]\n    # sections = [\"posts\"]\n    fullCover = false\n    centerHeadline = false\n    style = \"\"\n    [home.feature]\n        orientation = \"horizontal\"\n        color = \"primary\"\n        width = 4\n        align = \"start\"\n# toml-docs-end home\n\n# toml-docs-start navigation\n[navigation]\n    anchor = true\n    logo = \"/img/logo_icon.svg\"\n    logo-mode = false\n    logo-align = \"center\"\n    logo-height = 30\n    color = \"body\"\n    fixed = true\n    overlay = false\n    overlayMode = \"dark\"\n    horizontal = false\n    offset = \"5.7rem\"\n    breadcrumb = true\n    toc = true\n    sidebar = true\n    size = \"md\"\n    startLevel = 2\n    endLevel = 3\n    maxNumHeadings = 9\n    [navigation.padding]\n        x = 4\n        y = 4\n    [navigation.search]\n        enabled = true\n        modal = true\n# toml-docs-end navigation\n\n# toml-docs-start messages\n[messages]\n    placement = \"bottom-right\"\n# toml-docs-end messages\n\n[pages]\n    readingTime = true\n    wordCount = true\n\n# toml-docs-start sharing\n[sharing]\n    enabled = true\n    sort = \"weight\"\n    reverse = false\n    webshare = true\n\n[[sharing.providers]]\n    name = \"LinkedIn\"\n    url = \"https://www.linkedin.com/sharing/share-offsite/?url={url}\"\n    icon = \"fab linkedin\"\n    weight = 10\n\n[[sharing.providers]]\n    name = \"Twitter\"\n    url = \"https://twitter.com/home?status={url}\"\n    icon = \"fab x-twitter\"\n    weight = 20\n\n[[sharing.providers]]\n    name = \"Facebook\"\n    url = \"https://www.facebook.com/sharer.php?u={url}\"\n    icon = \"fab facebook\"\n    weight = 30\n\n[[sharing.providers]]\n    name = \"WhatsApp\"\n    url = \"whatsapp://send?text={title}%20{url}\"\n    icon = \"fab whatsapp\"\n    weight = 40\n\n[[sharing.providers]]\n    name = \"email\"\n    url = \"{url}\"\n    icon = \"fas link\"\n    weight = 50\n    clipboard = true\n# toml-docs-end sharing\n\n[favicon]\n    logo = \"img/favicon.png\"\n    sizes = [16, 32, 48]\n\n# toml-docs-start theme-colors\n[style]\n    primary = \"#d43900\"\n    secondary = \"#6c757d\"\n    success = \"#198754\"\n    info = \"#0dcaf0\"\n    warning = \"#ffc107\"\n    danger = \"#dc3545\"\n    light = \"#f8f9fa\"\n    dark = \"#212529\"\n# toml-docs-end theme-colors\n    themeOpacity = \"10\"\n    darkModeShade = \"20%\"\n    darkModeTint = \"40%\"\n# toml-docs-start font\n    themeFont = \"Inter\"\n    # themeFontPath = \"https://fonts.googleapis.com/css2?family=Inter:wght@200;300;600&display=swap\" # external path\n    themeFontPath = \"/fonts\" # local path\n    themeFontPreload = \"/fonts/inter-v12-latin-regular.woff2\"\n    fontSizeBase = \"1rem\" # assumes the browser default, typically '16px'\n# toml-docs-end font\n# toml-docs-start build\n    purge = false\n# toml-docs-end build\n  [style.title]\n    size = 4\n    arrangement = \"above\"\n    headingStyle = \"display\"\n    contentStyle = \"lead text-muted\"\n\n[schema]\n    type = \"Organization\"\n    name = \"Hinode\"\n    locale = \"en-US\"\n    # twitter = \"https://twitter.com/gethinode\"\n    # linkedIn = \"\"\n    github = \"https://github.com/gethinode/hinode\"\n    section = \"blog\"\n    [schema.author]\n        name = \"Mark Dumay\"\n        # twitter = \"https://twitter.com/markdumay\"\n        linkedin = \"https://www.linkedin.com/in/markdumay/\"\n        github = \"https://github.com/markdumay\"\n    [schema.logo]\n        url = \"img/logo512x512.png\"\n        width = 512\n        height = 512\n    [schema.image]\n        url = \"img/logo1280x640.png\"\n        width = 1280\n        height = 640\n\n[opengraph]\n    images = [\"logo.png\"]\n    locale = \"en_US\"\n\n[links]\n    hinode = \"https://gethinode.com\"\n\n# toml-docs-start headers\n[headers]\n  [headers.netlify]\n    source = \"netlify.toml\"\n# toml-docs-end headers\n\n# toml-docs-start csp\n[modules.hinode.csp]\n    style-src = [\"www.youtube.com\"]\n    font-src = [\"fonts.gstatic.com\"]\n    frame-src = [\n        \"player.cloudinary.com\",\n        \"www.youtube-nocookie.com\",\n        \"www.youtube.com\"\n    ]\n    img-src = [\n        \"data:\",\n        \"*.imgix.net\",\n        \"*.imagekit.io\",\n        \"*.cloudinary.com\",\n        \"i.ytimg.com\"\n    ]\n# toml-docs-end csp\n\n[modules.vimeo]\n    local = true\n    integration = \"optional\"\n    state = \"async\"\n    url = \"https://player.vimeo.com/api/player.js\"\n\n[modules.vimeo.csp]\n    frame-src = [\"player.vimeo.com\"]\n    img-src = [\"i.vimeocdn.com\"]\n    script-src = [\"player.vimeo.com\"]\n"
  },
  {
    "path": "config/_default/server.toml",
    "content": "# Auto-generated file - do not modify\n\n[[headers]]\n  for = '/**'\n\n  [headers.values]\n    Access-Control-Allow-Origin = '*'\n    Content-Security-Policy = \"\"\"\n        base-uri 'self'; \\\n        connect-src 'self' *.analytics.google.com *.google.com *.google-analytics.com *.googletagmanager.com; \\\n        default-src 'none'; \\\n        font-src 'self' fonts.gstatic.com data:; \\\n        form-action 'self'; \\\n        frame-ancestors 'self' http://localhost:1313 gethinode.com; \\\n        frame-src *.googletagmanager.com player.cloudinary.com www.youtube-nocookie.com www.youtube.com player.vimeo.com; \\\n        img-src 'self' *.google-analytics.com *.googletagmanager.com googletagmanager.com ssl.gstatic.com www.gstatic.com data: *.imgix.net *.imagekit.io *.cloudinary.com i.ytimg.com tile.openstreetmap.org i.vimeocdn.com; \\\n        manifest-src 'self'; \\\n        media-src 'self'; \\\n        object-src 'none'; \\\n        script-src 'self' *.google-analytics.com *.googletagmanager.com *.analytics.google.com googletagmanager.com tagmanager.google.com player.vimeo.com; \\\n        style-src 'self' googletagmanager.com tagmanager.google.com fonts.googleapis.com www.youtube.com 'unsafe-inline'; \\\n        \"\"\"\n    Permissions-Policy = 'geolocation=(), midi=(), sync-xhr=(), microphone=(), camera=(), magnetometer=(), gyroscope=(), fullscreen=(), payment=() '\n    Referrer-Policy = 'strict-origin'\n    Strict-Transport-Security = 'max-age=31536000; includeSubDomains; preload'\n    X-Content-Type-Options = 'nosniff'\n    X-XSS-Protection = '1; mode=block'\n    cache-control = 'max-age=0, no-cache, no-store, must-revalidate '\n\n"
  },
  {
    "path": "config/ci/hugo.toml",
    "content": "# cachedir default on POSIX: '/tmp/hugo_cache_runner'\n# cachedir default on Windows: '~\\AppData\\Local\\hugo_cache'\n# cachedir default on macOS: '/Users/runner/Library/Caches/hugo_cache'\n#\n# All six Hugo cache types are configured here to:\n#   - redirect assets/images from :resourceDir to :cacheDir so GitHub Actions can cache them\n#   - set maxAge = -1 across the board so --gc never prunes entries between CI runs\n\n[caches]\n  [caches.assets]\n    dir = ':cacheDir/resources/_gen' # redirect from :resourceDir to :cacheDir\n    maxAge = -1\n  [caches.getresource]\n    dir = ':cacheDir/:project'\n    maxAge = -1\n  [caches.images]\n    dir = ':cacheDir/resources/_gen' # redirect from :resourceDir to :cacheDir\n    maxAge = -1\n  [caches.misc]\n    dir = ':cacheDir/:project'\n    maxAge = -1\n  [caches.modulequeries]\n    dir = ':cacheDir/modules'\n    maxAge = -1 # override default 24h so --gc does not prune module query results\n  [caches.modules]\n    dir = ':cacheDir/modules'\n    maxAge = -1"
  },
  {
    "path": "config/development/params.toml",
    "content": "# Development-specific parameters for Hinode theme\n\n[modules.hinode.csp]\n    frame-ancestors = [\n        \"'self'\",\n        \"http://localhost:1313\",        # Allow self-embedding for testing\n        \"gethinode.com\"                 # Production embedding\n    ]\n    frame-src = [\n        \"*.googletagmanager.com\",\n        \"player.cloudinary.com\",\n        \"www.youtube-nocookie.com\",\n        \"www.youtube.com\",\n        \"player.vimeo.com\"\n    ]\n"
  },
  {
    "path": "config/postcss.config.js",
    "content": "const autoprefixer = require('autoprefixer')({})\nconst cssnano = require('cssnano')({\n  preset: ['advanced', {\n    discardUnused: {\n      fontFace: false  // Preserve all @font-face declarations\n    }\n  }]\n})\nconst purgeImport = require('@fullhuman/postcss-purgecss')\nconst purgeCSSPlugin = purgeImport.purgeCSSPlugin || purgeImport.default || purgeImport\nconst purgecss = purgeCSSPlugin({\n  content: ['./hugo_stats.json'],\n  defaultExtractor: (content) => {\n    const els = JSON.parse(content).htmlElements\n    return [...(els.tags || []), ...(els.classes || []), ...(els.ids || [])]\n  },\n  dynamicAttributes: ['aria-expanded', 'data-bs-theme', 'data-bs-main-theme', 'data-bs-theme-animate', 'data-transparent', 'role'],\n  fontFace: false,\n  safelist: {\n    standard: [\n      // Bootstrap form validation\n      'was-validated',\n      // Bootstrap dynamic states\n      'show',\n      'showing',\n      'hiding',\n      'active',\n      'disabled',\n      'collapsed',\n      'collapsing',\n      // SimpleDatatables modifier classes\n      'no-header',\n      'no-footer',\n      // SimpleDatatables table rendering classes (added by JS)\n      'th-inner',\n      'sortable',\n      'sortable-center',\n      'both',\n      'desc',\n      'asc',\n      // SimpleDatatables search component\n      'search-data-table',\n      'search-input',\n      // Bootstrap utilities used by SimpleDatatables\n      'float-right',\n      'float-left'\n    ],\n    // Classes with these patterns will be preserved along with their children\n    deep: [\n      // Bootstrap components that get dynamically modified\n      /modal/,\n      /dropdown/,\n      /carousel/,\n      /tooltip/,\n      /popover/,\n      /collapse/,\n      /offcanvas/,\n      // SimpleDatatables - preserve structure and all nested elements\n      /datatable/,\n      // Bootstrap form controls (used by SimpleDatatables)\n      /form-select/,\n      /form-control/,\n      // Bootstrap button groups (used by SimpleDatatables search)\n      /btn-group/,\n      // Bootstrap responsive tables (used by list component)\n      /table-responsive/,\n      // Syntax highlighting - preserve Chroma classes and descendants\n      /chroma/,\n      /syntax-highlight/,\n      /codeblock/\n    ],\n    // Preserve any selector containing these patterns\n    greedy: [\n      // Third-party library prefixes (well-namespaced, safe to use greedy)\n      /^fa-/,              // FontAwesome\n      /^leaflet-/,         // Leaflet maps\n      /^katex-/,           // KaTeX math (note: using katex- not just katex)\n      /^mermaid/,          // Mermaid diagrams\n      /datatable/,         // SimpleDatatables (all variants: datatable-*, *-datatable, etc.)\n      /^cky-/,             // CookieYes\n\n      // Component-specific prefixes\n      /clipboard-/,        // Clipboard component\n      /command-/,          // Command component\n      /search-/,           // Search functionality (includes search-input, search-data-table)\n      /suggestion__/,      // Search suggestions (FlexSearch)\n      /testimonial-/,      // Testimonial component\n      /preview-/,          // Preview component (mod-blocks)\n\n      // Syntax highlighting - third-party engines (Chroma handled in deep)\n      /^hljs-/,            // highlight.js\n      /^language-/,        // Prism/generic\n\n      // Pagination and navigation\n      /page-item/,\n      /page-link/,\n      /pagination/,        // Bootstrap pagination classes\n      /nav-item/,\n      /nav-link/,\n      /navbar-/,\n      /^nav-/,             // Nav variant classes (nav-callout, nav-panel, nav-pills, nav-tabs, nav-underline)\n\n      // Bootstrap responsive tables\n      /table-responsive/,  // All table-responsive-* variants and attribute selectors\n\n      // Color mode toggle - d-none-main-* classes plus [data-bs-main-theme=\"dark\"] compound selectors\n      /d-none-main/,\n\n      // Bootstrap transitions and utilities that get added via JS\n      /fade/,\n      /^translate/         // Bootstrap utilities\n    ]\n  }\n})\n\nmodule.exports = {\n  plugins: [\n    autoprefixer,\n    cssnano,\n    purgecss\n  ]\n}\n"
  },
  {
    "path": "config/production/deployment.toml",
    "content": "# toml-docs-start az-blob\n# By default, files are uploaded in an arbitrary order.\n# Files that match the regular expressions in the \"Order\" list\n# will be uploaded first, in the listed order.\norder = [\".webp$\", \".jpg$\", \".gif$\"]\n\n[targets]\nname = \"hinode\"\nURL = \"azblob://$web\"\n\n[[matchers]]\n# Cache static assets for 1 year.\npattern = \"^.+\\\\.(js|css|svg|ttf)$\"\ncacheControl = \"max-age=31536000, no-transform, public\"\ngzip = true\n\n[[matchers]]\npattern = \"^.+\\\\.(png|jpg|webp)$\"\ncacheControl = \"max-age=31536000, no-transform, public\"\ngzip = false\n\n[[matchers]]\n# Set custom content type for /sitemap.xml\npattern = \"^sitemap\\\\.xml$\"\ncontentType = \"application/xml\"\ngzip = true\n\n[[matchers]]\npattern = \"^.+\\\\.(html|xml|json)$\"\ngzip = true\n# toml-docs-end az-blob\n"
  },
  {
    "path": "config/production/hugo.toml",
    "content": "canonifyURLs = false"
  },
  {
    "path": "config/production/params.toml",
    "content": "# Production-specific parameters\n\n[style]\n    purge = true\n\n[modules.hinode.csp]\n    frame-ancestors = [\n        \"'self'\"\n    ]\n"
  },
  {
    "path": "content/_index.md",
    "content": "---\ntitle: Welcome to Hinode!\ndescription: A clean documentation and blog theme for your Hugo site based on Bootstrap 5.\n---\n"
  },
  {
    "path": "content/_modals/_index.md",
    "content": "---\ntitle: Modal elements\ncascade:\n- build:\n    list: local\n    publishResources: false\n    render: never\n---"
  },
  {
    "path": "data/.gitkeep",
    "content": ""
  },
  {
    "path": "data/dimensions.yml",
    "content": "- ratio: 4x3\n  dimensions:\n    - 576x432\n    - 768x576\n    - 992x744\n    - 1200x900\n    - 1400x1050\n    - 2800x2100\n- ratio: 3x1\n  dimensions:\n    - 576x192\n    - 768x256\n    - 992x331\n    - 1200x400\n    - 1400x467\n    - 2800x933\n- ratio: 3x2\n  dimensions:\n    - 576x384\n    - 768x512\n    - 992x661\n    - 1200x800\n    - 1400x933\n    - 2800x1867\n- ratio: 1x1\n  dimensions:\n    - 576x576\n    - 768x768\n    - 992x992\n    - 1200x1200\n    - 1400x1400\n    - 2800x2800\n- ratio: 16x9\n  dimensions:\n    - 576x324\n    - 768x432\n    - 992x558\n    - 1200x675\n    - 1400x788\n    - 2800x1575\n- ratio: 21x9\n  dimensions:\n    - 576x247\n    - 768x329\n    - 992x425\n    - 1200x514\n    - 1400x600\n    - 2800x1200\n- ratio: auto\n  dimensions:\n    - 576\n    - 768\n    - 992\n    - 1200\n    - 1400\n    - 2800\n"
  },
  {
    "path": "data/netlify.toml",
    "content": "# toml-docs-start netlify\n[build]\n    publish = \"exampleSite/public\"\n    command = \"HUGO_HINODE_VERSION=$(git describe --tags $(git rev-list --tags --max-count=1)) npm run build:example\"\n\n[build.environment]\n    DART_SASS_VERSION = \"1.98.0\"\n    HUGO_VERSION = \"0.153.1\"\n    HUGO_ENV = \"production\"\n    HUGO_ENABLEGITINFO = \"true\"\n    NODE_VERSION = \"24.12.0\"\n    NPM_VERSION = \"11.6.2\"\n# toml-docs-end netlify\n\n[context.deploy-preview]\n    command = \"HUGO_HINODE_VERSION=$(git describe --tags $(git rev-list --tags --max-count=1)) npm run build:example -- -b $DEPLOY_PRIME_URL\"\n\n[context.branch-deploy]\n    command = \"HUGO_HINODE_VERSION=$(git describe --tags $(git rev-list --tags --max-count=1)) npm run build:example -- -b $DEPLOY_PRIME_URL\"\n\n[dev]\n    framework = \"#custom\"\n    command = \"HUGO_HINODE_VERSION=$(git describe --tags $(git rev-list --tags --max-count=1)) npm run start:example\"\n    targetPort = 1313\n    port = 8888\n    publish = \"public\"\n    autoLaunch = false\n\n# toml-docs-start plugins\n[[plugins]]\n    package = \"netlify-plugin-hugo-cache-resources\"\n# toml-docs-end plugins\n"
  },
  {
    "path": "data/server.toml",
    "content": "# toml-docs-start server-config\n[[headers]]\n    for = \"/**\"\n    [headers.values]\n        Strict-Transport-Security = \"max-age=31536000; includeSubDomains; preload\"\n        X-Content-Type-Options = \"nosniff\"\n        X-XSS-Protection = \"1; mode=block\"\n        Referrer-Policy = \"strict-origin\"\n        Permissions-Policy = \"\"\"\\\n            geolocation=(), \\\n            midi=(), \\\n            sync-xhr=(), \\\n            microphone=(), \\\n            camera=(), \\\n            magnetometer=(), \\\n            gyroscope=(), \\\n            fullscreen=(), \\\n            payment=() \\\n            \"\"\"\n        cache-control = \"\"\"\\\n            max-age=0, \\\n            no-cache, \\\n            no-store, \\\n            must-revalidate \\\n            \"\"\"\n        Access-Control-Allow-Origin = \"*\"\n        Content-Security-Policy = \"\"\"\\\n            default-src 'none'; \\\n            script-src 'self'; \\\n            font-src 'self'; \\\n            connect-src 'self'; \\\n            img-src 'self'; \\\n            style-src 'self'; \\\n            base-uri 'self'; \\\n            object-src 'none'; \\\n            form-action 'self'; \\\n            manifest-src 'self'; \\\n            media-src 'self' \\\n            \"\"\"\n# toml-docs-end server-config\n"
  },
  {
    "path": "data/structures/abbr.yml",
    "content": "comment: >-\n  Use the abbr shortcode to show the long form of an abbreviation. The\n  abbreviation data is centrally stored in a data file with translation support.\nicon: spellcheck\narguments:\n  key:\n    type: string\n    position: 0\n    optional: false\n    preview: true\n    comment: >-\n      Case-insensitive key of the abbreviation. In shorthand notation, this is\n      the first (and only) matched argument. Non-alphanumeric keys must be quoted.\n  data:\n    type: string\n    default: abbr\n    optional: true\n    comment: >-\n      Filename of the abbreviation input. You can omit the file extension. The\n      file should reside in the `data` folder. The data supports language\n      extensions. For example, `abbr.en.yaml` refers to the English translation\n      of the abbreviation data. The filename `abbr.yaml` is used when no suitable\n      translation is found.\n  class:\n    type: string\n    optional: true\n    comment: >-\n      Class attribute of the abbr element. For example, specify `initialism` for\n      a slightly smaller font size.\nexample: |\n  {{< abbr HTML >}}\n"
  },
  {
    "path": "data/structures/accordion-item.yml",
    "content": "comment: >-\n  Defines an individual accordion item.\nicon: expand_circle_down\narguments:\n  title:\n    release: v1.0.0\n    preview: true\n  show:\n  class:\n  # deprecated arguments\n  header:\n    type: string\n    optional: true\n    comment: Header of the accordion item.\n    deprecated: v1.0.0\n    alternative: title\nbody:\n  optional: false\n  comment: Content of the accordion item.\n  group: shortcode\nexample: |\n  {{< accordion-item title=\"First item\" show=\"true\" >}}\n    Content of the first accordion item.\n  {{< /accordion-item >}}\n"
  },
  {
    "path": "data/structures/accordion.yml",
    "content": "comment: >-\n  Use the accordion shortcode to show a group of vertically collapsing and\n  expanding items. Add accordion-item inner elements for each item.\nicon: expand_all\nchildren:\n  - accordion-item\narguments:\n  id:\n    preview: true\n  always-open:\n  class:\nbody:\n  type: string\n  optional: false\n  group: shortcode\n  comment: Inner <accordion-item> elements for each panel.\nexample: |\n  {{< accordion id=\"accordion-example\" always-open=\"true\" >}}\n    {{< accordion-item title=\"First item\" show=\"true\" >}}\n      Content of the first accordion item.\n    {{< /accordion-item >}}\n    {{< accordion-item title=\"Second item\" >}}\n      Content of the second accordion item.\n    {{< /accordion-item >}}\n  {{< /accordion >}}\n"
  },
  {
    "path": "data/structures/alert.yml",
    "content": "comment: >-\n  Use the alert shortcode to display a contextual feedback message. The inner\n  content is used as alert text.\nicon: add_alert\narguments:\n  alert-type:\n    release: v1.0.0\n  class:\n  color:\n    default: danger\n    preview: true\n  dismissible:\n  icon:\n  # deprecated arguments\n  type:\n    type: select\n    optional: true\n    comment: Type of the alert, generates an alert with related color and icon.\n    options:\n      values:\n        - danger\n        - info\n    deprecated: v1.0.0\n    alternative: alert-type\nexample: |\n  {{< alert color=\"warning\" dismissible=\"true\" >}}\n    This is a warning alert — check the settings before continuing.\n  {{< /alert >}}\nbody:\n  optional: false\n  comment: Alert text.\n  group: shortcode\n"
  },
  {
    "path": "data/structures/args.yml",
    "content": "comment: >-\n  Generates a table of structured arguments defined in a data file identified\n  by a structure name.\nicon: table_chart\narguments:\n  page:\n    optional: false\n    group: partial\n  structure:\n    type: string\n    position: 0\n    optional: false\n    preview: true\n    comment: >-\n      Name of the data file that contains argument definitions. Supported data\n      formats include JSON, TOML, YAML, and XML. You can omit the file\n      extension. The file should reside in the `data/structures` folder. For\n      bookshop components, add the `bookshop-` prefix to the structure name.\n  group:\n    type: string\n    position: 1\n    optional: true\n    comment: >-\n      Name of the group filter. This is typically used when a shortcode and\n      partial have common arguments. The group filter binds a specific argument\n      to a particular group. By default, an argument belongs to all groups.\n  parent:\n    type: bool\n    position: 2\n    optional: true\n    comment: >-\n      Flag to filter only arguments that have a parent attribute (either\n      `cascade` or `merge`).\n  render-type:\n    type: select\n    position: 3\n    default: both\n    optional: true\n    comment: >-\n      Option whether to render arguments, user-defined types, or both. Please\n      note that the arguments will render a link to a user-defined type in any\n      case.\n    options:\n      values:\n        - arguments\n        - types\n        - both\n    release: v1.0.0\n  header-level:\n    type: int\n    default: 3\n    optional: true\n    options:\n      min: 1\n      max: 6\n    comment: >-\n      The header level to use for the user-defined type headers.\n    release: v1.0.0\nexample: |\n  {{< args structure=\"alert\" >}}\n"
  },
  {
    "path": "data/structures/background.yml",
    "content": "comment: >-\n  Applies styling to the background of an element.\ngroup: partial\narguments:\n  background:\n  class:\n"
  },
  {
    "path": "data/structures/badge.yml",
    "content": "comment: Use the badge shortcode to enrich headings.\nicon: badge\narguments:\n  title:\n    preview: true\n  class:\n  color:\n    default: secondary\nexample: |\n  {{< badge color=\"primary\" >}}New{{< /badge >}}\n"
  },
  {
    "path": "data/structures/breadcrumb.yml",
    "content": "comment: >-\n  Displays the current page's location within the site's navigational\n  hierarchy.\nicon: segment\narguments:\n  page:\n  path:\n    preview: true\nexample: |\n  {{< breadcrumb >}}\n"
  },
  {
    "path": "data/structures/button-group.yml",
    "content": "comment: >-\n  Displays a group of related buttons. Add button inner elements for each\n  button.\nicon: buttons_alt\nchildren:\n  - button\narguments:\n  label:\n    preview: true\n  aria-label:\n  aria-role:\n    release: v2.7.0\n  attributes:\n    release: v2.7.0\nbody:\n  type: string\n  optional: false\n  comment: Inner <button> elements for each button.\nexample: |\n  {{< button-group aria-label=\"Basic example\" >}}\n    {{< button color=\"primary\" href=\"#!\" >}}Left{{< /button >}}\n    {{< button color=\"primary\" href=\"#!\" >}}Middle{{< /button >}}\n    {{< button color=\"primary\" href=\"#!\" >}}Right{{< /button >}}\n  {{< /button-group >}}"
  },
  {
    "path": "data/structures/button.yml",
    "content": "comment: >-\n  Display a button with a hyperlink.\nicon: touch_app\narguments:\n  title:\n    preview: true\n  class:\n  color:\n    default: primary\n  href:\n  relref:\n    group: shortcode\n  id:\n  button-state:\n    release: v1.0.0\n  button-size:\n    release: v1.0.0\n  outline:\n  badge:\n  label:\n  aria-label:\n    group: shortcode\n  tooltip:\n  collapse-id:\n  link-type:\n    release: v1.0.0\n  placement:\n  icon:\n  icon-class:\n    release: v2.0.0\n  order:\n  justify:\n  toast-id:\n    release: v1.0.0\n  clipboard:\n  cue:\n  tab:\n  attributes:\n  spacing:\n  wrapper:\n    group: shortcode\n  # deprecated arguments\n  type:\n    type: select\n    optional: true\n    default: button\n    comment: Type of the element.\n    options:\n      values:\n        - link\n        - button\n    deprecated: v1.0.0\n    alternative: link-type\n  state:\n    type: select\n    optional: true\n    default: enabled\n    comment: State of the button.\n    options:\n      values:\n        - enabled\n        - disabled\n        - active\n        - inactive\n    deprecated: v1.0.0\n    alternative: button-state\n  size:\n    type: select\n    optional: true\n    default: md\n    comment: Size of the button.\n    options:\n      values:\n        - sm\n        - md\n        - lg\n    deprecated: v1.0.0\n    alternative: button-size\n  toast:\n    type: string\n    optional: true\n    comment: Identifier (ID) of the toast to display when the button is clicked.\n    deprecated: v1.0.0\n    alternative: toast-id\n  collapse:\n    type: string\n    optional: true\n    comment: >-\n      ID of the panel to collapse. Cannot be used together with tooltip. Ignored\n      for active/inactive buttons.\n    deprecated: v1.0.0\n    alternative: collapse-id\nbody:\n  type: string\n  optional: false\n  comment: Label text of the button.\nexample: |\n  {{< button color=\"primary\" href=\"/docs/\" button-size=\"sm\" >}}Learn more{{< /button >}}\n"
  },
  {
    "path": "data/structures/card-group.yml",
    "content": "comment: >-\n  Displays a responsive grid of Bootstrap cards rendered from a list of pages,\n  with optional pagination or a link to a list page.\nicon: grid_view\nchildren:\n  - card\narguments:\n  page:\n    optional: true\n  title:\n    optional: true\n    preview: true\n  class:\n  color:\n  padding:\n  gutter:\n    release: v0.19.0\n  header-style:\n    release: 1.0.0\n  body-style:\n    release: 1.0.0\n  footer-style:\n    release: 1.0.0\n  list:\n  cards:\n  limit:\n    release: v1.0.0\n  cols:\n    release: v0.19.0\n  paginate:\n  pagination:\n    release: v0.23.12\n    group: partial\n  href:\n    group: partial\n  href-title:\n    release: v1.0.0\n  href-force:\n    release: v1.0.0\n    group: partial\n  separator:\n  loading:\n  ratio:\n  portrait:\n  icon-rounded:\n    release: v1.0.0\n  align:\n  wrapper:\n    default: p-0\n  responsive:\n  link-type:\n    release: v1.0.0\n  scroll:\n  icon-style:\n    release: v1.0.0\n  orientation:\n  subtle:\n  button:\n  spacer:\n    release: v0.24.16\n  hook:\n    default: assets/card.html\n    group: partial\n  bento:\n    release: v0.27.0\n  valign:\n    release: v0.27.0\n  styles:\n    type:\n      - styles\n      - '[]map[string]interface {}'\n    release: v0.27.0\n    optional: true\n    group: partial\n  link-icon:\n    release: v2.4.0\n  more-link-icon:\n    type: string\n    optional: true\n    group: partial\n  more-link-type:\n    type: string\n    optional: true\n    group: partial\n\n  # deprecated arguments\n  header:\n    type: select\n    optional: true\n    default: full\n    parent: cascade\n    comment: >-\n      Header components of the card, displayed in small caps.\n    options:\n      values:\n        - full\n        - publication\n        - tags\n        - none\n    deprecated: v1.0.0\n    alternative: header-style\n  body:\n    type: select\n    optional: true\n    default: full\n    parent: cascade\n    release: v0.24.16\n    comment: >-\n      Body components of the element.\n    options:\n      values:\n        - full\n        - title\n        - none\n    deprecated: v1.0.0\n    alternative: body-style\n  footer:\n    type: select\n    optional: true\n    default: none\n    parent: cascade\n    comment: >-\n      Footer components of the element, displayed in small caps.\n    options:\n      values:\n        - full\n        - publication\n        - tags\n        - none\n    deprecated: v1.0.0\n    alternative: footer-style\n  iconRounded:\n    type: bool\n    parent: cascade\n    optional: true\n    release: v0.24.8\n    deprecated: v1.0.0\n    alternative: icon-rounded\n    comment: Stack the icon in a round container.\n  buttonType:\n    type: select\n    parent: cascade\n    optional: true\n    default: button\n    comment: Type of the button element.\n    release: v0.23.18\n    deprecated: v1.0.0\n    alternative: link-type\n    options:\n      values:\n        - link\n        - button\n  style:\n    type: string\n    parent: cascade\n    optional: true\n    release: v0.23.0\n    comment: Icon style.\n    deprecated: v1.0.0\n    alternative: icon-style\n  hrefTitle:\n    type: string\n    optional: true\n    comment: >-\n      Title of the button or hyperlink as companion to href.\n    group: partial\n    deprecated: v1.0.0\n    alternative: href-title\n  max:\n    type: int\n    optional: true\n    comment: Maximum number of elements to display.\n    group: partial\n    options:\n      min: 1\n    deprecated: v1.0.0\n    alternative: limit\nbody:\n  type: string\n  optional: false\n  group: shortcode\n  comment: Inner <card> elements for each card.\nexample: |\n  {{< card-group cols=\"3\" >}}\n    {{< card path=\"/blog/post-1\" >}}\n    {{< card path=\"/blog/post-2\" >}}\n    {{< card path=\"/blog/post-3\" >}}\n  {{< /card-group >}}\n"
  },
  {
    "path": "data/structures/card-icon.yml",
    "content": "comment: >-\n  Renders a card icon including optional rounding.\ngroup: partial\narguments:\n  icon:\n  padding:\n  icon-rounded:\n  icon-style:\n  class:\n"
  },
  {
    "path": "data/structures/card.yml",
    "content": "comment: >-\n  Displays a Bootstrap card that links to a content page. Individual arguments\n  such as title, href, and thumbnail override the corresponding page attributes.\nicon: article\narguments:\n  title:\n    optional: true\n    preview: true\n  path:\n  href:\n    release: 2.1.3\n  class:\n    parent: merge\n  color:\n    optional: true\n    parent: cascade\n  padding:\n    parent: cascade\n    default: 3\n  gutter:\n    default: 0\n    parent: cascade\n  header-style:\n    parent: cascade\n    release: 1.0.0\n  body-style:\n    parent: cascade\n    release: 1.0.0\n  footer-style:\n    parent: cascade\n    release: 1.0.0\n  description:\n    group: partial\n  loading:\n    parent: cascade\n    group: partial\n  thumbnail:\n  ratio:\n    parent: cascade\n    group: partial\n  portrait:\n    parent: cascade\n    release: v0.24.16\n  alt:\n    release: v0.19.0\n  icon:\n  icon-rounded:\n    release: v1.0.0\n  align:\n    default: start\n    parent: cascade\n    release: v0.23.0\n  scroll:\n    parent: cascade\n    group: partial\n  wrapper:\n  icon-style:\n    release: v1.0.0\n  orientation:\n    parent: cascade\n  subtle:\n    parent: cascade\n    release: v0.23.0\n  button:\n    parent: cascade\n    release: v0.23.0\n  button-label:\n    release: v1.0.0\n  link-type:\n  hook:\n    default: assets/image.html\n    group: partial\n  sizes:\n    group: partial\n  anchor:\n    release: v0.24.23\n  links:\n    release: v1.14.0\n    group: partial\n  link-icon:\n    parent: cascade\n    release: v2.4.0\n  exact:\n    release: v1.22.0\n  # deprecated arguments\n  header:\n    type: select\n    optional: true\n    default: full\n    parent: cascade\n    comment: >-\n      Header components of the card, displayed in small caps.\n    options:\n      values:\n        - full\n        - publication\n        - tags\n        - none\n    deprecated: v1.0.0\n    alternative: header-style\n  body:\n    type: select\n    optional: true\n    default: full\n    parent: cascade\n    release: v0.24.16\n    comment: >-\n      Body components of the element.\n    options:\n      values:\n        - full\n        - title\n        - none\n    deprecated: v1.0.0\n    alternative: body-style\n  footer:\n    type: select\n    optional: true\n    default: none\n    parent: cascade\n    comment: >-\n      Footer components of the element, displayed in small caps.\n    options:\n      values:\n        - full\n        - publication\n        - tags\n        - none\n    deprecated: v1.0.0\n    alternative: footer-style\n  iconRounded:\n    type: bool\n    parent: cascade\n    optional: true\n    release: v0.24.8\n    deprecated: v1.0.0\n    alternative: icon-rounded\n    comment: Stack the icon in a round container.\n  buttonType:\n    type: select\n    parent: cascade\n    optional: true\n    default: button\n    comment: Type of the button element.\n    release: v0.23.18\n    deprecated: v1.0.0\n    alternative: link-type\n    options:\n      values:\n        - link\n        - button\n  style:\n    type: string\n    parent: cascade\n    optional: true\n    release: v0.23.0\n    comment: Icon style.\n    deprecated: v1.0.0\n    alternative: icon-style\n  buttonLabel:\n    type: string\n    optional: true\n    release: v0.23.2\n    comment: >-\n      Label of the link button, defaults to the card title.\n    deprecated: v1.0.0\n    alternative: button-label\nexample: |\n  {{< card path=\"/blog/first-post\" ratio=\"16x9\" >}}\nbody:\n  optional: true\n  comment: >-\n    Description of the card.\n  group: shortcode\n"
  },
  {
    "path": "data/structures/carousel-item.yml",
    "content": "comment: Renders a carousel item with a responsive image.\nicon: photo\narguments:\n  page:\n  src:\n    preview: true\n  ratio:\n    group: partial\n  portrait:\n    group: partial\n  loading:\n  caption:\n  active:\nexample: |\n  {{< carousel-item src=\"img/slide1.jpg\" caption=\"First slide\" active=\"true\" >}}\n"
  },
  {
    "path": "data/structures/carousel.yml",
    "content": "comment: >-\n  Displays a carousel of several images. Add carousel-item inner elements to\n  define the individual image slides.\nicon: view_carousel\nchildren:\n  - carousel-item\narguments:\n  id:\n  ratio:\n    preview: true\n  portrait:\n    release: v0.18.3\n  class:\nexample: |\n  {{< carousel ratio=\"16x9\" >}}\n    {{< carousel-item src=\"img/slide1.jpg\" caption=\"First slide\" active=\"true\" >}}\n    {{< carousel-item src=\"img/slide2.jpg\" caption=\"Second slide\" >}}\n  {{< /carousel >}}\nbody:\n  type: string\n  optional: false\n  comment: Inner `img` elements that define the individual image slides."
  },
  {
    "path": "data/structures/collapse.yml",
    "content": "comment: Defines a hidden panel that can be revealed by a trigger.\nicon: collapse_content\narguments:\n  id:\n    preview: true\n  class:\nbody:\n  type: string\n  optional: false\n  comment: Inner content to be revealed when the collapse is triggered.\nexample: |\n  {{< button collapse-id=\"collapse-1\" >}}Toggle panel{{< /button >}}\n  {{< collapse id=\"collapse-1\" class=\"p-3 border rounded\" >}}\n    Hidden content revealed when the user clicks the trigger.\n  {{< /collapse >}}\n"
  },
  {
    "path": "data/structures/command.yml",
    "content": "comment: >-\n  Generates terminal output for bash, powershell, or sql shell languages.\nicon: terminal\narguments:\n  user:\n  host:\n  prompt:\n  shell:\n    preview: true\n  class:\nbody:\n  type: string\n  optional: false\n  comment: >-\n    The shell commands and their output. Start a line with `(out)` to specify\n    an output line. Use the following line continuation characters for each\n    supported language:\n     - bash: backslash symbol\n     - PowerShell: backtick symbol\n     - sql: `(con)` line suffix\nexample: |\n  {{< command user=\"user\" host=\"localhost\" >}}\n  export MY_VAR=123\n  echo \"hello\"\n  (out)hello\n  {{< /command >}}\n"
  },
  {
    "path": "data/structures/docs.yml",
    "content": "comment: >-\n  Captures a code snippet from a supported input file using named section\n  markers. The captured snippet is rendered using syntax highlighting.\nicon: code_blocks\narguments:\n  name:\n    preview: true\n  file:\n  show:\n    default: true\n  full:\n  id:\n  class:\nexample: |\n  {{< docs name=\"theme-colors\" file=\"./data/style.toml\" >}}\n"
  },
  {
    "path": "data/structures/download.yml",
    "content": "comment: Generates a download button or link.\ngroup: partial\narguments:\n  download:\n  title:\n  class:\n  color:\n    default: primary\n  outline:\n    default: true\n  icon:\n    default: download\n  order:\n    default: last\n  button-size:\n    default: sm\n  link-type:\n    default: button\n  justify:\n  minimal:\n"
  },
  {
    "path": "data/structures/example.yml",
    "content": "comment: >-\n  Displays a code example and renders a preview of the same input. The shortcode\n  accepts the languages supported by Hugo's built-in highlight function.\nicon: code\narguments:\n  id:\n  lang:\n    default: markdown\n    preview: true\n  class:\n  show-markup:\n    release: v1.0.0\n  show-preview:\n    release: v1.0.0\n  # deprecated arguments\n  show_markup:\n    type: bool\n    optional: true\n    comment: Indicates if the markup should be output in the HTML.\n    deprecated: v1.0.0\n    alternative: show-markup\n  show_preview:\n    type: bool\n    optional: true\n    comment: Indicates if the preview should be output in the HTML.\n    deprecated: v1.0.0\n    alternative: show-preview\nbody:\n  type: string\n  optional: false\n  comment: The example input.\nexample: |\n  {{< example lang=\"hugo\" >}}\n  {{</* kbd \"CTRL+C\" */>}}\n  {{< /example >}}\n"
  },
  {
    "path": "data/structures/featured-illustration.yml",
    "content": "comment: Defines a featured illustration with optional icon or image.\ngroup: partial\narguments:\n  page:\n  icon:\n  image:\n  mode:\n  ratio:\n  portrait:\n  sizes:\n  title:\n  wrapper:\n  class:\n  anchor:\n"
  },
  {
    "path": "data/structures/file.yml",
    "content": "comment: >-\n  Prints the full content of any given file with syntax highlighting, using the\n  Chroma syntax highlighter.\nicon: file_open\nexample: |\n  {{< file file=\"config/_default/hugo.toml\" lang=\"toml\" >}}\narguments:\n  file:\n    optional: true\n    release: v1.0.0\n    preview: true\n  lang:\n  show:\n    default: true\n  full:\n  id:\n  class:\n  highlight-options:\n    release: v1.0.0\n  # deprecated arguments\n  path:\n    type: string\n    comment: >-\n      Path of the input file. The path is relative to the `basePath` defined in\n      the `docs` section of the site's parameters. If the file starts with `./`,\n      the path of the repository is used as base path instead.\n    deprecated: v1.0.0\n    alternative: file\n  options:\n    type: string\n    optional: true\n    comment: >-\n        Hugo highlighting options, see https://gohugo.io/shortcodes/highlight/#options-1.\n    release: v0.27.6\n    deprecated: v1.0.0\n    alternative: highlight-options\n"
  },
  {
    "path": "data/structures/form-hook.yml",
    "content": "comment: >-\n  Renders a form with callback action. Assign a form-id when the form provider\n  requires a specific form definition.\narguments:\n  action:\n    optional: false\n  form-id:\n    optional: true\n"
  },
  {
    "path": "data/structures/get-dimension.yml",
    "content": "comment: >-\n  Initializes image dimensions (width x height) for supported image ratios.\ngroup: partial\narguments:\n  ratio:\n"
  },
  {
    "path": "data/structures/hero-image.yml",
    "content": "comment: Defines a hero image with optional overlay and positioning.\ngroup: partial\narguments:\n  page:\n  icon:\n  image:\n  anchor:\n  mode:\n  ratio:\n  portrait:\n  sizes:\n  title:\n  wrapper:\n  class:\n  image-overlay:\n  justify:\n"
  },
  {
    "path": "data/structures/image-adapter-rewrite.yml",
    "content": "comment: >-\n  Rewrites an origin URL to a target URL as supported by a CDN image adapter.\ngroup: partial\narguments:\n  url-host:\n    release: v1.0.0\n  url-dir:\n    release: v1.0.0\n  url-file:\n    release: v1.0.0\n  account:\n  container:\n  # deprecated arguments\n  host:\n    type: string\n    optional: true\n    comment: >-\n      Host of an URL. For example, the host of the URL\n      'https://example.com/first/second/third.webp' equals 'example.com'.\n    deprecated: v1.0.0\n    alternative: url-host\n  dir:\n    type: string\n    optional: true\n    comment: >-\n      All but the last element of an URL extension. For example, the dir of the\n      URL 'https://example.com/first/second/third.webp' equals '/first/second/'.\n    deprecated: v1.0.0\n    alternative: url-dir\n  file:\n    type: string\n    optional: false\n    comment: >-\n      The last element of an URL extension. For example, the file of the\n      URL 'https://example.com/first/second/third.webp' equals 'third.webp'.\n    deprecated: v1.0.0\n    alternative: url-file\n"
  },
  {
    "path": "data/structures/image-adapter.yml",
    "content": "comment: >-\n  Defines the interface to be implemented by a CDN image adapter.\ngroup: partial\narguments:\n  url-host:\n    release: v1.0.0\n  url-dir:\n    release: v1.0.0\n  url-file:\n    release: v1.0.0\n  absolute-url:\n    release: v1.0.0\n  img:\n  format:\n  transform:\n  image-height:\n    release: v1.0.0\n  image-width:\n    release: v1.0.0\n  anchor:\n"
  },
  {
    "path": "data/structures/image-definition.yml",
    "content": "comment: >-\n  Defines the source and rendering attributes of a processed image, including\n  dimensions, loading behavior, and optional caption.\ngroup: partial\narguments:\n  src:\n  page:\n    optional: true\n  mode:\n  ratio:\n  portrait:\n  image-height:\n  image-width:\n  loading:\n  priority:\n  sizes:\n  title:\n  caption:\n  wrapper:\n  class:\n  figclass:\n  plain:\n  anchor:\n  absolute-url:\n"
  },
  {
    "path": "data/structures/image-dimension.yml",
    "content": "comment: >-\n  Defines the width and height dimensions of a processed image for a given\n  source and aspect ratio.\ngroup: partial\narguments:\n  src:\n  page:\n    optional: true\n  ratio:\n  portrait:\n  image-height:\n  image-width:\n  plain:\n  anchor:\n  imageset:\n"
  },
  {
    "path": "data/structures/image-rewrite.yml",
    "content": "comment: >-\n  Defines a set of image source parameters for CDN-based image processing,\n  including account, container, and adapter hook.\ngroup: partial\narguments:\n  src:\n  account:\n  container:\n  hook:\n"
  },
  {
    "path": "data/structures/image-set.yml",
    "content": "comment: >-\n  Defines the rewrite parameters used to process an image via a CDN adapter\n  hook, including transform, format, and anchor options.\ngroup: partial\narguments:\n  src:\n  img:\n  absolute-url:\n    release: v1.0.0\n  dims:\n  hook:\n  transform:\n  format:\n  anchor:\n  include-width:\n"
  },
  {
    "path": "data/structures/image.yml",
    "content": "comment: >-\n  Displays a responsive image with an optional aspect ratio. Local and remote\n  images are automatically resized and converted to the WebP format.\nicon: image\narguments:\n  src:\n    type: string\n    optional: true\n    position: 0\n    preview: true\n  page:\n    optional: true\n  mode:\n  ratio:\n  portrait:\n    release: v0.18.3\n  loading:\n    release: v0.21.0\n  priority:\n  sizes:\n    group: partial\n  title:\n  caption:\n  wrapper:\n    release: v0.18.3\n  class:\n  figclass:\n    release: v0.23.0\n  plain:\n    release: v0.24.0\n  anchor:\n    release: v0.24.22\n  image-height:\n    release: v1.0.0\n  image-width:\n    release: v1.0.0\n  # deprecated arguments\n  url:\n    type:\n      - string\n      - template.URL\n    optional: true\n    comment: >-\n      Path or url of the image, e.g. `img/example.jpg`. Images with multiple\n      color modes are expected to have a basename that ends with either `-dark`\n      or `-light`.\n    deprecated: v1.0.0\n    alternative: src\nexample: |\n  {{< image src=\"img/example.jpg\" ratio=\"16x9\" caption=\"Example caption\" >}}\n"
  },
  {
    "path": "data/structures/ins.yml",
    "content": "comment: Underlines text.\nicon: format_underlined\nbody:\n  optional: false\n  preview: true\n  comment: Text to be underlined.\n"
  },
  {
    "path": "data/structures/kbd.yml",
    "content": "comment: Displays a keyboard input element.\nicon: keyboard\narguments:\n  text:\n    optional: true\n    position: 0\n    release: v1.0.0\n    preview: true\n  class:\n  color:\n  # deprecated arguments\n  title:\n    type: select\n    optional: true\n    comment: >-\n      Title of the keyboard input. In shorthand notation, this is the first (and\n      only) matched argument.\n    deprecated: v1.0.0\n    alternative: text\nexample: |\n  {{< kbd \"CTRL+C\" >}}\n"
  },
  {
    "path": "data/structures/link.yml",
    "content": "comment: >-\n  Generates a hyperlink for a named link, URL, or internal reference. Any inner\n  text is used as the link title.\nicon: link\narguments:\n  page:\n  href:\n    position: 0\n    preview: true\n  cue:\n  tab:\n  case:\n  external:\n  force:\n    release: v0.27.20\n  class:\n  text:\n    optional: true\n    group: partial\n  title:\n    release: v0.26.0\n  position:\n    group: partial\n    optional: true\n    release: v1.0.0\n  exact:\n    release: v1.20.0\n  skip-validation:\n    type: bool\n    optional: true\n    group: partial\n    comment: Skip internal link validation (use for dynamic content).\n    release: v2.0.0\n  # deprecated arguments\n  destination:\n    type: string\n    optional: true\n    group: partial\n    comment: Target destination.\n    deprecated: v1.0.0\n    alternative: href\n  name:\n    type: string\n    optional: true\n    comment: Alias of href.\n    deprecated: v1.0.0\n    alternative: href\n  url:\n    type: string\n    optional: true\n    comment: Alias of href.\n    deprecated: v1.0.0\n    alternative: href\nbody:\n  type: string\n  optional: true\n  group: shortcode\n  comment: Link description.\nexample: |\n  {{< link href=\"https://gethinode.com\" >}}Visit Hinode{{< /link >}}\n"
  },
  {
    "path": "data/structures/links.yml",
    "content": "comment: >-\n  Renders a group of links with optional alignment and link type styling.\ngroup: partial\narguments:\n  page:\n    optional: true\n  links:\n  align:\n  justify:\n  link-type:\n"
  },
  {
    "path": "data/structures/list.yml",
    "content": "comment: >-\n  Displays a list of items with a thumbnail alternating between left and right\n  alignment.\narguments:\n  page:\n    type:\n      - '*hugolib.pageState'\n      - '*hugolib.pageForShortcode'\n    optional: false\n    comment: Required context of the current page.\n    group: partial\n  list:\n    type:\n      - 'page.Pages'\n      - 'resource.Resources'\n    optional: false\n    comment: Required array of pages.\n    group: partial\n  title:\n    type: string\n    optional: true\n    comment: Optional title of the card group.\n  loading:\n    type: select\n    default: eager\n    optional: true\n    comment: >-\n      Loading behavior of the image. The loading of lazily loaded images is\n      deferred until the image is within scrolling range of the viewport. This\n      should reduce the initial loading time of the website. It is recommended\n      to lazily load only those images that are below the pagefold.\n    options:\n      values:\n        - eager\n        - lazy\n  class:\n    type: string\n    optional: true\n    comment: Class attribute of the tab element, e.g. “w-50”.\n  color:\n    type: select\n    optional: true\n    comment: >-\n      Theme color of the element.\n    options:\n      values:\n        - primary\n        - secondary\n        - success\n        - danger\n        - warning\n        - info\n        - light\n        - dark\n        - body\n"
  },
  {
    "path": "data/structures/live-pages.yml",
    "content": "comment: >-\n  Retrieves a filtered and sorted page collection relative to a provided page\n  or section. Returns a dummy collection when live editing in CloudCannon.\ngroup: partial\narguments:\n  page:\n    type:\n      - '*hugolib.pageState'\n      - '*hugolib.pageForShortcode'\n    optional: true\n    comment: Page context, used to retrieve page collections.\n    group: partial\n  section:\n    type: string\n    optional: true\n    comment: >-\n      Name of site section to use for the page collection. When omitted, the\n      current page is used as context instead. Use \"/\" to retrieve the home\n      page.\n  kind:\n    type: select\n    optional: true\n    default: regular\n    comment: >-\n      Kind of page collection to use.\n    options:\n      values:\n        - regular\n        - related\n        - taxonomy\n  nested:\n    type: bool\n    optional: true\n    comment: >-\n      If set, retrieves all pages below the section or current page recursively.\n      By default, only first-order children are retrieved.\n  tags:\n    type:\n      - string\n      - \"[]interface {}\"\n    optional: true\n    comment: >-\n      Tags to be used as filter. When set, only pages that match at least one of\n      the provided tags are retrieved.\n  keywords:\n    type:\n      - string\n      - \"[]interface {}\"\n    optional: true\n    comment: >-\n      Keywords to be used as filter. When set, only pages that match at least\n      one of the provided keywords are retrieved.\n  categories:\n    type:\n      - string\n      - \"[]interface {}\"\n    optional: true\n    comment: >-\n      Categories to be used as filter. When set, only pages that belong to at\n      least one of the provided categories are retrieved.\n  sort:\n    type: string\n    optional: true\n    default: date\n    comment: >-\n      Page parameter to sort the page collection by. Both default and custom\n      parameters can be used.\n  reverse:\n    type: bool\n    optional: true\n    default: true\n    comment: >-\n      If set, returns the page collection in descending order.\n  group-by:\n    type: select\n    optional: true\n    comment:\n      If set, groups the results by the specified field. Currently only supports\n      grouping by section.\n    values:\n      - section\n    release: v2.0.0\n  include-list:\n    type: bool\n    optional: true\n    comment:\n      If set, includes list pages in the results.\n    release: v2.0.0\n  exclude-filtered:\n    type: bool\n    optional: true\n    comment: >-\n      If set, excludes pages that have the excludeFromSidebar parameter set to true.\n      Useful for filtering out non-latest versions or other pages that should not\n      appear in navigation.\n    release: v2.0.0"
  },
  {
    "path": "data/structures/mark.yml",
    "content": "comment: Highlights text by applying a background color.\nicon: highlight\narguments:\n  class:\n  color:\n    preview: true\nbody:\n  optional: false\n  comment: Text to be marked.\nexample: |\n  {{< mark >}}highlight{{< /mark >}}\n"
  },
  {
    "path": "data/structures/menu-item.yml",
    "content": "comment: >-\n  Renders an individual menu item with configurable icon style, layout, and\n  number of columns.\nicon: list\ngroup: partial\narguments:\n  page:\n  menu-entry:\n  menu-style:\n    type: select\n    optional: true\n    default: masonry\n    comment: Style of the menu layout.\n    options:\n      values:\n        - grid\n        - masonry\n  cols:\n    default: 3\n  icon-rounded:\n  icon-style:\n  padding:\n  class:\n"
  },
  {
    "path": "data/structures/nav-item.yml",
    "content": "comment: >-\n  Defines an individual tab pane or accordion item for use within a nav group.\nicon: tab_new_right\narguments:\n  page:\n    group: partial\n  id:\n    group: partial\n  parent-id:\n    release: v1.0.0\n  title:\n    release: v1.0.0\n    preview: true\n  icon:\n    release: v2.7.0\n    comment: >-\n      Icon to display in the tab button. When set without a title, renders an\n      icon-only button; title is then used as aria-label and tooltip.\n  attributes:\n    release: v2.7.0\n  show:\n  disabled:\n  fade:\n  class:\n  body:\n    group: partial\n  raw:\n    group: partial\n    release: v1.3.0\n  navitem-type:\n    release: v1.0.0\n  illustration:\n    type:\n      - string\n      - template.HTML\n    optional: true\n    group: partial\n  hook:\n    default: assets/hero-image.html\n    group: partial\n    release: v1.0.0\n  # deprecated arguments\n  header:\n    type: string\n    optional: true\n    comment: Header of the item.\n    deprecated: v1.0.0\n    alternative: title\n  item_type:\n    type: select\n    optional: true\n    comment: Type of the item to render.\n    options:\n      values:\n        - accordion\n        - tab-pane\n    group: partial\n    deprecated: v1.0.0\n    alternative: navitem-type\n  parentID:\n    type: string\n    optional: true\n    comment: Identification of the parent (e.g. nav control).\n    group: partial\n    deprecated: v1.0.0\n    alternative: parent-id\nbody:\n  optional: false\n  comment: Content of the item.\n  group: shortcode\nexample: |\n  {{< nav-item title=\"Tab #1\" show=\"true\" >}}\n    Content of the first tab pane.\n  {{< /nav-item >}}\n"
  },
  {
    "path": "data/structures/nav.yml",
    "content": "comment: >-\n  Displays a tab group of multiple items. Add nav-item inner elements for each\n  tab pane.\nicon: view_list\nchildren:\n  - nav-item\narguments:\n  id:\n  page:\n    group: partial\n  list:\n    group: partial\n  nav-disabled:\n    release: v1.0.0\n  nav-icons:\n    release: v2.7.0\n    group: partial\n  nav-item-attrs:\n    release: v2.7.0\n    group: partial\n  nav-items:\n    release: v1.0.0\n  nav-show:\n    release: v1.0.0\n  nav-titles:\n    release: v1.0.0\n  tab-type:\n    release: v1.0.0\n    preview: true\n  align:\n    release: v2.7.0\n    comment: >-\n      Horizontal alignment of the nav controls. Ignored when vertical is set.\n  controls-placement:\n    release: v2.7.0\n    comment: >-\n      Position of the nav controls relative to the content panes (\"top\" or\n      \"bottom\"). Ignored when vertical is set.\n  attributes:\n    release: v2.7.0\n  vertical:\n  word-wrap:\n    release: v1.0.0\n  class:\n  pane:\n  responsive:\n    release: v1.4.0\n  width:\n    default: 12\n    group: partial\n  # deprecated arguments\n  type:\n    type: select\n    optional: true\n    comment: Type of the tab group.\n    options:\n      values:\n        - tabs\n        - pills\n        - underline\n        - callout\n    deprecated: v1.0.0\n    alternative: tab-type\n  wrap:\n    type: bool\n    default: false\n    optional: true\n    comment: Flag to enable word wrapping of tab titles.\n    deprecated: v1.0.0\n    alternative: word-wrap\nbody:\n  type: string\n  optional: false\n  group: shortcode\n  comment: Inner <nav-item> elements for each tab or pill.\nexample: |\n  {{< nav tab-type=\"tabs\" id=\"tabs-example\" >}}\n    {{< nav-item title=\"Tab #1\" show=\"true\" >}}\n      Content of the first tab pane.\n    {{< /nav-item >}}\n    {{< nav-item title=\"Tab #2\" >}}\n      Content of the second tab pane.\n    {{< /nav-item >}}\n  {{< /nav >}}\n"
  },
  {
    "path": "data/structures/navbar-item.yml",
    "content": "comment: >-\n  Defines an individual item of the navigation bar.\ngroup: partial\narguments:\n  page:\n  menu-entry:\n    optional: true # TODO: change to false when deprecated `menu` property is fully removed\n    release: v2.0.0\n  menu-parent:\n    type:\n      - '*navigation.MenuEntry'\n      - 'map[string]interface {}'\n    optional: true\n    comment: Parent of the current navbar item.\n    release: v2.0.0\n  class:\n  cue:\n  tab:\n  plain:\n  breakpoint:\n    default: md\n    release: v1.2.0\n  modal:\n    release: v1.2.0\n  id:\n    release: v1.2.0\n\n  # deprecated arguments\n  menu:\n    type:\n      - '*navigation.MenuEntry'\n      - 'map[string]interface {}'\n    optional: true\n    comment: Menu data to use for the navbar item.\n    deprecated: v2.0.0\n    alternative: menu-entry\n  parent:\n    type: '*navigation.MenuEntry'\n    optional: true\n    comment: Parent of the current navbar item.\n    deprecated: v2.0.0\n    alternative: menu-parent\n"
  },
  {
    "path": "data/structures/navbar.yml",
    "content": "comment: >-\n  Displays a navigation header with a toggler. The menu items are derived from\n  the site's configuration and support one level of nesting.\nicon: menu\narguments:\n  page:\n  path:\n    group: shortcode\n  title:\n    preview: true\n  class:\n  color:\n  id:\n    type: string\n    optional: true\n    comment: >-\n      Identification of the navbar, defaults to `navbar-0`. The id is used by\n      several child elements, including a color mode switcher, version switcher,\n      and collapse panel.\n  menu:\n    release: v2.0.0\n  breakpoint:\n    default: md\n    release: v1.0.0\n  style:\n    type: select\n    optional: true\n    default: light\n    comment: Style of the navbar.\n    options:\n      values:\n        - light\n        - dark\n    group: partial\n  mode:\n    type: bool\n    optional: true\n    default: true\n    comment: >-\n      Flag to include a color mode switcher, defaults to `true` when dark mode\n      is enabled.\n  search:\n    type: bool\n    optional: true\n    default: true\n    comment: Flag to include a search input.\n  fixed:\n    type: bool\n    optional: true\n    default: false\n    comment: Flag to indicate the navbar should stick to the top.\n    group: partial\n  overlay:\n    type: bool\n    optional: true\n    default: false\n    comment: >-\n      Flag to indicate if the navbar should render as an overlay on the current\n      page.\n    group: partial\n    release: v0.22.6\n  overlayMode:\n    type: select\n    optional: true\n    default: dark\n    comment: Color mode of the overlay.\n    options:\n      values:\n        - light\n        - dark\n        - none\n    group: partial\n    release: v0.23.0\n  logo:\n    type: path\n    optional: true\n    comment: >-\n      Address of the logo image, defaults to the parameter `logo` set in the\n      `main` section of the site's parameter configuration.\n  logo-align:\n    type: select\n    optional: true\n    default: center\n    comment: Alignment of the logo when the navbar is in collapsed mode.\n    options:\n      values:\n        - start\n        - center\n    release: v1.15.0\n  logo-mode:\n    type: bool\n    default: false\n    optional: true\n    comment: >-\n      Flag indicating if the logo should support color modes. If set, the\n      navbar searches for images having a matching color-mode suffix\n      such as `-light` or `-dark`.\n    release: v1.15.0\n  transparent:\n    type: bool\n    default: false\n    optional: true\n    comment: >-\n      Flag indicating the navbar should be transparent. When set, the navbar\n      uses the current section's background color and applies a semi-\n      transparent blur filter. The site's body color is used as fallback. If\n      set, the color mode of the current section is used too. When no mode is\n      set, the navbar applies a mode with the best contrast.\n    release: v1.19.0\n  # deprecated arguments\n  size:\n    type: select\n    optional: true\n    comment: Breakpoint of the navbar toggler.\n    default: md\n    options:\n      values:\n        - xs\n        - sm\n        - md\n        - lg\n        - xl\n    deprecated: v1.0.0\n    alternative: breakpoint\n  menus:\n    type: string\n    optional: true\n    default: main\n    comment: Name of the menu configuration.\n    deprecated: v2.0.0\n    alternative: menu\nexample: |\n  {{< navbar id=\"navbar-1\" title=\"Brand\" menu=\"main\" color=\"body-tertiary\" >}}\n"
  },
  {
    "path": "data/structures/page-alert.yml",
    "content": "comment: >-\n  Adds a dismissible alert message to the top of the page, above the main\n  navigation menu.\ngroup: partial\narguments:\n  page:\n    type:\n      - '*hugolib.pageState'\n      - '*hugolib.pageForShortcode'\n    optional: false\n    comment: Context of the current page.\n    group: partial"
  },
  {
    "path": "data/structures/pagination.yml",
    "content": "comment: >-\n  Adds a pagination element to a page to split long lists across multiple pages.\ngroup: partial\narguments:\n  page:\n    type:\n      - '*hugolib.pageState'\n      - '*hugolib.pageForShortcode'\n    optional: false\n    comment: Context of the current page.\n    group: partial\n  format:\n    type: select\n    optional: true\n    default: default\n    comment:\n    options:\n      values:\n        - default\n        - terse\n"
  },
  {
    "path": "data/structures/persona.yml",
    "content": "comment: >-\n  Displays a custom persona card with thumbnail, title, and optional link.\nicon: account_circle\narguments:\n  path:\n    type: path\n    optional: true\n    comment: >-\n      Path of the page that defines the card content. You can set `title`,\n      `href`, `thumbnail` and the inner content individually too.\n  title:\n    type:\n      - string\n      - template.HTML\n    optional: true\n    preview: true\n    comment: Title of the card.\n  class:\n    type: string\n    optional: true\n    comment: Class attribute of the card element, e.g. `w-50`.\n  color:\n    type: select\n    optional: true\n    default: primary\n    comment: Theme color of the element.\n    options:\n      values:\n        - primary\n        - secondary\n        - success\n        - danger\n        - warning\n        - info\n        - light\n        - dark\n        - white\n        - black\n        - body\n        - body-tertiary\n  href:\n    type:\n      - string\n      - template.URL\n    optional: true\n    comment: Address for the button or hyperlink.\n  content:\n    type:\n      - string\n      - template.HTML\n    optional: true\n    comment: Content of the card.\n    group: partial\n  thumbnail:\n    type: url\n    optional: true\n    comment: Thumbnail image url, displayed on top or the left of the card.\nbody:\n  optional: true\n  comment: >-\n    Description of the card.\n  group: shortcode\nexample: |\n  {{< persona thumbnail=\"/img/placeholder.png\" title=\"Jane Doe\" color=\"primary\" >}}\n    Frontend developer and open-source contributor.\n  {{< /persona >}}\n"
  },
  {
    "path": "data/structures/release.yml",
    "content": "comment: >-\n  Displays a release button that links to a specific release. Use the state to\n  indicate if it is a new or deprecated feature.\nicon: new_label\narguments:\n  version:\n    preview: true\n  release-state:\n    release: v1.0.0\n  short:\n  button-size:\n    release: v1.0.0\n  class:\n  inline:\n  link-type:\n    release: v1.0.0\n  # deprecated arguments\n  state:\n    type: select\n    optional: true\n    default: new\n    comment: State of the feature.\n    options:\n      values:\n        - new\n        - deprecated\n    deprecated: v1.0.0\n    alternative: release-state\n  size:\n    type: select\n    optional: true\n    default: md\n    comment: Size of the button.\n    options:\n      values:\n        - sm\n        - md\n        - lg\n    deprecated: v1.0.0\n    alternative: button-size\n  type:\n    type: select\n    optional: true\n    default: button\n    comment: Type of the element.\n    options:\n      values:\n        - link\n        - button\n    deprecated: v1.0.0\n    alternative: link-type\nexample: |\n  {{< release version=\"v1.0.0\" >}}\n"
  },
  {
    "path": "data/structures/script.yml",
    "content": "comment: >-\n  Includes a reference to a local or external JavaScript file, with optional\n  loading behavior, category assignment, and SRI integrity hash.\ngroup: partial\narguments:\n  link:\n    type: string\n    optional: false\n    comment: >-\n      Location of the script source, either an URL for an external script or a\n      (relative) path for a local script.\n  state:\n    type: select\n    optional: true\n    comment: >-\n      Defines the loading behavior of the script bundle. By default, scripts are\n      loaded immediately. Use `async` to process the script in the background.\n      Use `defer` to load the script in relative order when the DOM is fully\n      built.\n    options:\n      values:\n        - async\n        - defer\n        - immediate\n  category:\n    type: select\n    optional: true\n    default: other\n    comment: >-\n      Assigns the script to a category that can be used for cookie consent\n      management.\n    options:\n      values:\n        - necessary\n        - functional\n        - analytics\n        - performance\n        - advertisement\n        - other\n  integrity:\n    type: string\n    optional: true\n    comment: >-\n      Cryptographic hash of the script to enable Subresource Integrity (SRI).\n  script-type:\n    type: string\n    optional: true\n    release: v1.7.0\n    comment: >-\n      Type of the attribute of the script. Set the value to `module` to import\n      the script as a JavaScript module.\n"
  },
  {
    "path": "data/structures/scripts.yml",
    "content": "comment: >-\n  Bundles a JavaScript file for client-side processing. Scripts can be included\n  as critical, core, or optional files.\ngroup: partial\narguments:\n  page:\n    type:\n      - '*hugolib.pageState'\n      - '*hugolib.pageForShortcode'\n    optional: false\n    comment: Context of the current page.\n  type:\n    type: select\n    default: core\n    optional: true\n    comment: >-\n      Type of script bundle. Critical scripts are included in the page header\n      and are loaded immediately. Core scripts are bundled by category and are\n      loaded asynchronously. Optional scripts are loaded individually on the\n      pages that require them. They use the synchronization method as defined\n      in their containing module.\n    values:\n      - critical\n      - core\n      - optional"
  },
  {
    "path": "data/structures/section-header.yml",
    "content": "comment: >-\n  Renders a simple page section header with title, description, and content\n  fields.\ngroup: partial\narguments:\n  title:\n    type: string\n    optional: true\n    comment: Title of the section.\n  description:\n    type: string\n    optional: true\n    comment: Section description.\n  content:\n    type:\n      - string\n      - template.HTML\n    optional: true\n    comment: Section content.\n"
  },
  {
    "path": "data/structures/section-menu.yml",
    "content": "comment: Renders the section menu of a single page.\ngroup: partial\narguments:\n  page:\n    type:\n      - '*hugolib.pageState'\n      - '*hugolib.pageForShortcode'\n    optional: false\n    comment: Context of the current page.\n    group: partial\n"
  },
  {
    "path": "data/structures/section-title.yml",
    "content": "comment: >-\n  Renders a styled page section title with optional heading, links, color, and\n  layout options.\ngroup: partial\narguments:\n  heading:\n  links:\n  color:\n    default: body\n  class:\n  size:\n  use-title:\n  justify:\n  link-type:\n  use-section:\n  arrangement:\n  heading-style:\n  content-style:\n"
  },
  {
    "path": "data/structures/sidebar.yml",
    "content": "comment: >-\n  Renders the sidebar navigation of a single page, typically used in\n  documentation sections. On smaller screens it is replaced with an offcanvas element.\ngroup: partial\narguments:\n  page:\n    type:\n      - '*hugolib.pageState'\n      - '*hugolib.pageForShortcode'\n    optional: false\n    comment: Context of the current page.\n    group: partial\n  menu:\n    type: '[]interface {}'\n    optional: true\n    comment: Path of the sidebar navigation menu.\n  version:\n    type: string\n    optional: true\n    comment: >-\n      Version of the sidebar navigation, used to define the base URL of\n      generated links, together with the page's section.\n  auto-generate:\n    type: bool\n    optional: true\n    default: false\n    comment: >-\n      Flag to auto-generate the content of the sidebar. When set, the sidebar\n      lists all pages of the current section. Use `nested`, `reverse`, and\n      `sort` arguments to refine the behavior.\n    release: v2.0.0\n  nested:\n    default: true\n    release: v2.0.0\n  reverse:\n    default: false\n    release: v2.0.0\n  sort:\n    optional: true\n    default: weight\n    release: v2.0.0\n  level-min:\n    type: int\n    optional: true\n    default: 0\n    comment: >-\n      Minimum menu depth to render (1-based). Use with level-max to filter\n      rendered levels. 0 means no minimum filter.\n  level-max:\n    type: int\n    optional: true\n    default: 0\n    comment: >-\n      Maximum menu depth to render (1-based). Use 1 to render only\n      top-level entries. 0 means no maximum filter.\n  collapsible:\n    type: bool\n    optional: true\n    default: false\n    comment: >-\n      When true, renders a toggle button that collapses the sidebar to icon-only\n      view. Only effective in Mode A (level-max = 1). Default: false.\n"
  },
  {
    "path": "data/structures/spinner.yml",
    "content": "comment: >-\n  Use the spinner shortcode to indicate the loading state of a component or\n  page. The inner content is used as alternative description.\nicon: hourglass_empty\narguments:\n  class:\n  color:\n    default: primary\n    preview: true\n  grow:\n  label:\n    release: v2.7.0\nbody:\n  optional: false\n  comment: >-\n    Alternative description.\nexample: |\n  {{< spinner color=\"primary\" >}}Loading...{{< /spinner >}}\n"
  },
  {
    "path": "data/structures/stack.yml",
    "content": "comment: >-\n  Displays a stacked layout of Bootstrap cards rendered from a provided list of\n  pages, with optional column configuration and link styling.\nicon: view_agenda\narguments:\n  page:\n  gutter:\n    release: v0.19.0\n  list:\n    group: partial\n  limit:\n  cols:\n    release: v0.19.0\n  href:\n    group: partial\n  href-force:\n    release: v1.16.2\n    group: partial\n  href-title:\n    release: v2.0.0\n  link-type:\n    release: v0.23.18\n  link-icon:\n    release: v2.4.0\n  animated:\n    release: v0.27.0\n  styles:\n    type:\n      - styles\n      - '[]map[string]interface {}'\n    optional: true\n    comment: >-\n      Styles to apply to the individual cards. Supported elements are `ratio`,\n      `orientation`, `portrait`, and `width`.\n  padding:\n    release: v1.16.2\n  # deprecated arguments\n  max:\n    type: int\n    optional: true\n    comment: Maximum number of elements to display.\n    group: partial\n    options:\n      min: 1\n    deprecated: v1.16.2\n    alternative: limit\n  hrefTitle:\n    type: string\n    optional: true\n    comment: >-\n      Title of the button or hyperlink as companion to href.\n    group: partial\n    deprecated: v2.0.0\n    alternative: href-title\n  buttonType:\n    type: select\n    optional: true\n    default: button\n    release: v0.23.18\n    comment: Type of the button elements.\n    options:\n      values:\n        - link\n        - button\n    deprecated: v2.0.0\n    alternative: link-type\nexample: |\n  {{< stack limit=6 cols=3 >}}\n"
  },
  {
    "path": "data/structures/sub.yml",
    "content": "comment: >-\n  Displays text in subscript.\nicon: subscript\narguments:\n  text:\n    position: 0\n    preview: true\nexample: |\n  H{{< sub 2 >}}O is a liquid.\n"
  },
  {
    "path": "data/structures/sup.yml",
    "content": "comment: >-\n  Displays text in superscript.\nicon: superscript\narguments:\n  text:\n    position: 0\n    preview: true\nexample: |\n  2{{< sup 10 >}} is 1024.\n"
  },
  {
    "path": "data/structures/table.yml",
    "content": "comment: >-\n  Makes a Markdown table responsive with horizontal scrolling on smaller screens.\n  Sorting, paging, and searching require the simple-datatables module.\nicon: table_chart\narguments:\n  page:\n    group: partial\n  input:\n    type:\n      - string\n      - template.HTML\n    optional: false\n    comment: Table input in markdown format.\n    group: partial\n  breakpoint:\n    default: \"\"\n    position: 0\n    preview: true\n  class:\n  sortable:\n    release: v0.24.13\n  paginate:\n    release: v1.23.0\n  pagination:\n    release: v1.23.0\n  pagination-select:\n    release: v1.23.0\n  searchable:\n    release: v0.24.13\n  filter:\n  filter-col:\n  wrap:\n  wrapper:\n    release: v2.0.0\n  # deprecated arguments\n  paging:\n    type: bool\n    optional: true\n    comment: Whether paging is enabled for the table.\n    release: v0.24.13\n    deprecated: v1.23.0\n    alternative: paginate\n  pagingOptionPerPage:\n    type: int\n    optional: true\n    comment: >-\n      Sets the maximum number of rows to display on each page. Requires\n      `paging = true`.\n    release: v0.27.8\n    deprecated: v1.23.0\n    alternative: pagination\n  pagingOptionPageSelect:\n    type: string\n    optional: true\n    comment: >-\n      Sets the per page options in the dropdown. Must be an array of integers or\n      arrays in the format [label (string), value (int)]. Requires\n      `paginate = true`.\n    release: v0.27.8\n    deprecated: v1.23.0\n    alternative: pagination-select\nexample: |\n  {{< table >}}\n  | Column 1 | Column 2 | Column 3 |\n  |----------|----------|----------|\n  | Cell 1   | Cell 2   | Cell 3   |\n  | Cell 4   | Cell 5   | Cell 6   |\n  {{< /table >}}\nbody:\n  type: string\n  optional: false\n  comment: Table input in markdown format.\n"
  },
  {
    "path": "data/structures/testimonial.yml",
    "content": "comment: Displays a single testimonial card.\ngroup: partial\nicon: format_quote\narguments:\n  page:\n  content:\n    type:\n      - string\n      - template.HTML\n    optional: true\n    comment: Quote to include in the testimonial.\n    group: partial\n  color:\n  contact:\n    preview: true\n  role:\n  url:\n  image:\n  logo:\n  icon:\n  icon-style:\n    default: fa-5x\n    release: v2.0.0\n  padding:\n  orientation:\n  show-controls:\n    type: bool\n    optional: true\n    default: false\n    comment: >-\n      Trigger to add margins for carousel controls. If set,\n      the card includes a quote icon on the right-hand side too.\n  class:\n  link:\n  align:\n    default: start\n    release: v2.0.0\nbody:\n  optional: false\n  comment: Quote to include in the testimonial.\n  group: shortcode\n"
  },
  {
    "path": "data/structures/timeline.yml",
    "content": "comment: >-\n  Shows items ordered on a vertical timeline.\nicon: timeline\narguments:\n  page:\n    group: partial\n  heading:\n    group: partial\n  data:\n    preview: true\n    optional: true\n  section:\n    release: v2.7.0\n    comment: >-\n      Hugo content section to source timeline items from (e.g. \"changelog\").\n      When set, takes precedence over data. Items are sorted by date descending.\n  limit:\n    release: v2.7.0\n  layout:\n    release: v2.7.0\n    options:\n      values:\n        - default\n        - start\n  background:\n  class:\n  justify:\nexample: |\n  {{< timeline data=\"events\" >}}\n  {{< timeline section=\"changelog\" layout=\"start\" >}}"
  },
  {
    "path": "data/structures/toast.yml",
    "content": "comment: >-\n  Prepares a dismissible toast notification message. Use a button trigger to\n  display the message on screen.\nicon: toast\narguments:\n  title:\n    release: v1.0.0\n    preview: true\n  id:\n  class:\n  message:\n    group: partial\n  # deprecated arguments\n  header:\n    type: string\n    optional: true\n    comment: Header of the toast message. Uses the site title by default.\n    deprecated: v1.0.0\n    alternative: title\nbody:\n  type: string\n  optional: false\n  comment: Toast message.\n  group: shortcode\nexample: |\n  {{< button toast-id=\"toast-1\" >}}Show notification{{< /button >}}\n  {{< toast id=\"toast-1\" title=\"Update available\" >}}\n    A new version has been released.\n  {{< /toast >}}"
  },
  {
    "path": "data/structures/toc.yml",
    "content": "comment: Renders the table of contents of a single page.\ngroup: partial\narguments:\n  page:\n    type:\n      - '*hugolib.pageState'\n      - '*hugolib.pageForShortcode'\n    optional: false\n    comment: Context of the current page.\n    group: partial\n"
  },
  {
    "path": "data/structures/tooltip.yml",
    "content": "comment: >-\n  Displays a tooltip for a hyperlink. The inner content is used as the link\n  text.\nicon: tooltip\narguments:\n  title:\n    preview: true\n  href:\n  class:\n  color:\n    default: dark\n  placement:\n  spacing:\n    default: false\nbody:\n  optional: false\n  comment: Hyperlink text.\nexample: |\n  {{< tooltip title=\"Tooltip text\" href=\"/docs/\" >}}Hover over me{{< /tooltip >}}\n"
  },
  {
    "path": "data/structures/version.yml",
    "content": "comment: >-\n  Returns the current version defined in package.json, with a v prefix. The\n  partial does not require any arguments.\n"
  },
  {
    "path": "data/structures/video.yml",
    "content": "comment: >-\n  Embeds a responsive video player for supported video providers such as YouTube\n  and Cloudinary.\nicon: videocam\narguments:\n  page:\n    release: v0.26.5\n  position:\n    release: v0.26.5\n  provider:\n    release: v1.0.0\n  title:\n  class:\n    position: 1\n  media-id:\n    position: 0\n    release: v1.0.0\n    preview: true\n  account:\n    release: v0.26.5\n  autoplay:\n  autotitle:\n    release: v0.25.2\n  ratio:\n    release: v0.26.5\n  query-args:\n    release: v1.0.0\n  # deprecated arguments\n  id:\n    type: string\n    optional: true\n    comment: ID of the video to be embedded.\n    deprecated: v1.0.0\n    alternative: media-id\n  options:\n    type: string\n    optional: true\n    comment: >-\n      Optional query parameters to append to video asset's url. The query string\n      is prepended with a `?` symbol. Only applicable to Cloudinary.\n    release: v0.28.2\n    deprecated: v1.0.0\n    alternative: query-args\n  host:\n    type: string\n    optional: true\n    comment: >-\n      Host name of the video provider. It should match one of the registered\n      providers in the site's parameters under `videos`.\n    release: v0.26.5\n    deprecated: v1.0.0\n    alternative: provider\nexample: |\n  {{< video provider=\"youtube\" media-id=\"dQw4w9WgXcQ\" title=\"Example Video\" >}}\n"
  },
  {
    "path": "eslint.config.mjs",
    "content": "import js from '@eslint/js'\nimport stylistic from '@stylistic/eslint-plugin'\nimport globals from 'globals'\n\nexport default [\n  js.configs.recommended,\n  stylistic.configs.customize({\n    indent: 2,\n    quotes: 'single',\n    semi: false,\n    arrowParens: false,\n    braceStyle: '1tbs',\n    commaDangle: 'never'\n  }),\n  {\n    languageOptions: {\n      globals: {\n        ...globals.browser\n      }\n    },\n    rules: {\n      // Match neostandard/StandardJS conventions\n      '@stylistic/space-before-function-paren': ['error', 'always'],\n      '@stylistic/arrow-parens': ['error', 'as-needed'],\n      '@stylistic/operator-linebreak': ['error', 'after', { overrides: { '?': 'before', ':': 'before' } }],\n      '@stylistic/max-statements-per-line': 'off',\n      'no-unused-vars': ['error', { vars: 'all', args: 'after-used', argsIgnorePattern: '^_', ignoreRestSiblings: true }]\n    }\n  },\n  {\n    files: ['assets/js/sidebar-toggle.js'],\n    languageOptions: {\n      globals: {\n        bootstrap: 'readonly'\n      }\n    }\n  },\n  {\n    ignores: [\n      'assets/js/critical/languageSelector.js',\n      'assets/js/critical/color.js',\n      'assets/js/analytics.js',\n      'assets/js/flexsearch.js',\n      'assets/js/navbar.js',\n      'assets/js/sharing.js',\n      'assets/js/vendor/**',\n      'node_modules/**'\n    ]\n  }\n]\n"
  },
  {
    "path": "exampleSite/.gitignore",
    "content": "_vendor/\nexampleSite/public/\npublic/\nresources/\n\n.DS_store\n.hugo_build.lock\n.hvm\n"
  },
  {
    "path": "exampleSite/config/_default/hugo.toml",
    "content": "resourcedir = '../resources/'\ntitle = \"Hinode\"\ncopyright = \"Copyright © 2026 Hinode Team\"\nenableGitInfo = true\n\n# additional settings\nbaseURL = \"https://demo.gethinode.com/\"\ncanonifyURLs = false\nenableEmoji = true\nenableRobotsTXT = true\nenableInlineShortcodes = true\n\n# prevent build failures when using Hugo's Instagram shortcode due to deprecated Instagram API.\n# See https://github.com/gohugoio/hugo/issues/7228#issuecomment-714490456\nignoreErrors = [\"error-remote-getjson\", \"warn-preview-restricted\"]\ntimeout = \"180s\"\n\nlanguageCode = \"en-us\"\ndefaultContentLanguage = \"en\"\ndefaultContentLanguageInSubdir = true\n\n[outputFormats]\n  [outputFormats.netlify]\n    mediaType = \"application/toml\"\n    baseName = \"netlify\"\n    isPlainText = true\n    notAlternative = true\n    permalinkable = true\n    root = true\n  [outputFormats.server]\n    mediaType = \"application/toml\"\n    baseName = \"server\"\n    isPlainText = true\n    notAlternative = true\n    permalinkable = true\n    root = true\n  [outputFormats.XML]\n    isPlainText = false\n    mediaType = \"application/xml\"\n    isHtml = false\n    noUgly = true\n    permalinkable = false\n    name = \"xml\"\n  [outputFormats.REDIR]\n    mediaType = \"text/netlify\"\n    baseName = \"_redirects\"\n    isPlainText = true\n    notAlternative = true\n\n[mediaTypes.\"text/netlify\"]\ndelimiter = \"\"\n\n[outputs]\nhome = [\"HTML\", \"RSS\", \"REDIR\", \"netlify\", \"server\"]\n\n[build]\n  writeStats = true\n  \n[taxonomies]\n  tag = 'tags'\n\n[pagination]\n  pagerSize = 9\n\n[security]\n  [security.http]\n    methods = ['(?i)GET|POST|HEAD']\n    urls = ['.*']\n\n[privacy]\n  [privacy.vimeo]\n    disabled = false\n    simple = true\n\n  [privacy.x]\n    disabled = false\n    enableDNT = true\n    simple = true\n\n  [privacy.instagram]\n    disabled = false\n    simple = true\n\n  [privacy.youtube]\n    disabled = false\n    privacyEnhanced = true\n\n[services]\n  [services.instagram]\n    disableInlineCSS = true\n  [services.x]\n    disableInlineCSS = true\n  [services.googleAnalytics]\n    ID = \"G-T85PPZ36GN\"\n\n[minify]\n  [minify.tdewolff.js]\n    keepVarNames = true\n    precision = 0\n    version = 2022\n  [minify.tdewolff.html]\n    keepWhitespace = true\n\n[segments]\n  [segments.headers]\n    [[segments.headers.includes]]\n       kind = '{home}'\n       output = '{netlify,server}'\n\n[module]\n  workspace = \"hinode.work\"\n  # replacements = 'github.com/gethinode/mod-utils/v5 -> /Users/mark/Development/GitHub/gethinode/mod-utils/, github.com/gethinode/mod-blocks -> /Users/mark/Development/GitHub/gethinode/mod-blocks/'\n  # replacements = 'github.com/gethinode/mod-fontawesome/v5 -> /Users/mark/Development/GitHub/gethinode/mod-fontawesome/, github.com/gethinode/mod-blocks -> /Users/mark/Development/GitHub/gethinode/mod-blocks/, github.com/gethinode/mod-utils/v5 -> /Users/mark/Development/GitHub/gethinode/mod-utils/, github.com/gethinode/mod-bootstrap-icons -> /Users/mark/Development/GitHub/gethinode/mod-bootstrap-icons/'\n  [[module.imports]]\n    path = \"github.com/gethinode/mod-bootstrap-icons\"\n  [[module.imports]]\n    path = \"github.com/gethinode/mod-blocks\"\n  [[module.imports]]\n    path = \"github.com/gethinode/mod-docs\"\n  [[module.imports.mounts]]\n    source = \"assets\"\n    target = \"assets\"\n  [[module.imports.mounts]]\n    source = \"content\"\n    target = \"content/docs\"\n  [[module.imports.mounts]]\n    source = \"data\"\n    target = \"data\"\n  [[module.imports.mounts]]\n    source = \"layouts\"\n    target = \"layouts\"\n  [[module.imports.mounts]]\n    source = \"static\"\n    target = \"static\"\n  [[module.imports]]\n    path = \"github.com/gethinode/mod-cookieyes/v2\"\n  [[module.imports]]\n    path = \"github.com/gethinode/hinode/v2\"\n"
  },
  {
    "path": "exampleSite/config/_default/languages.toml",
    "content": "# toml-docs-start lang-main\n[en]\nlanguageName = \"English\"\ncontentDir = \"content/en\"\nweight = 1\n# toml-docs-end lang-main\n# toml-docs-start lang-param\n[en.params.head]\ntagline = \"A Hugo Theme\"\n[en.params.social]\ntitle = \"Follow me\"\ncaption = \"I work on everything coding and tweet developer memes\"\n[en.params.footer]\n# toml-docs-end lang-param\n\n[fr]\nlanguageName = \"Français\"\ncontentDir = \"content/fr\"\nweight = 2\n[fr.params.opengraph]\nlocale = \"fr_FR\"\n[fr.params.head]\ntagline = \"Un thème Hugo\"\n[fr.params.social]\ntitle = \"Suivez-moi\"\ncaption = \"Je code et je tweet des mèmes de développeurs.\"\n\n[nl]\nlanguageName = \"Nederlands\"\ncontentDir = \"content/nl\"\nweight = 3\n[nl.params.opengraph]\nlocale = \"nl_NL\"\n[nl.params.head]\ntagline = \"Een Hugo Theme\"\n[nl.params.social]\ntitle = \"Volg mij\"\ncaption = \"Ik doe aan programmeren en tweet memes\"\n"
  },
  {
    "path": "exampleSite/config/_default/markup.toml",
    "content": "defaultMarkdownHandler = \"goldmark\"\n\n[highlight]\n    anchorLineNos = false\n    codeFences = true\n    guessSyntax = true\n    hl_Lines = \"\"\n    lineAnchors = \"\"\n    lineNoStart = 1\n    lineNos = false\n    lineNumbersInTable = false\n    noClasses = false\n    tabWidth = 2\n    ## Update the 'create:syntax' command in package.json to modify the style\n    ## The first two lines have been modified to remove the background color\n    # style = \"monokailight\" \n\n[goldmark]\n    [goldmark.extensions]\n        definitionList = true\n        footnote = true\n        linkify = true\n        strikethrough = true\n        table = true\n        taskList = true\n        typographer = true\n    [goldmark.extensions.passthrough]\n        enable = true\n    [goldmark.extensions.passthrough.delimiters]\n        block = [['\\[', '\\]'], ['$$', '$$']]\n        inline = [['\\(', '\\)'], ['$', '$']]\n    [goldmark.parser]\n        autoHeadingID = true\n        autoHeadingIDType = 'github'\n        wrapStandAloneImageWithinParagraph = false\n    [goldmark.parser.attribute]\n        block = true\n    [goldmark.renderer]\n        hardWraps = false\n        unsafe = false\n        xhtml = false"
  },
  {
    "path": "exampleSite/config/_default/menus/menus.en.toml",
    "content": "# Merge the menu configuration from the docs module\n# See https://gohugo.io/configuration/introduction/#merge-configuration-settings\n_merge = \"deep\"\n\n[[main]]\n  name = \"Blog\"\n  pageRef = \"/blog/\"\n  weight = 10\n\n[[main]]\n  name = \"Docs\"\n  pageRef = \"/docs/\"\n  weight = 20\n\n[[main]]\n  name = \"Tags\"\n  pageRef = \"/tags/\"\n  weight = 30\n\n[[social]]\n  name = \"LinkedIn\"\n  pre = \"fab linkedin\"\n  url = \"https://linkedin.com/\"\n  weight = 10\n\n[[social]]\n  name = \"GitHub\"\n  pre = \"fab fa-github\"\n  url = \"https://github.com/\"\n  weight = 20\n\n[[social]]\n  name = \"Medium\"\n  pre = \"fab medium\"\n  url = \"https://medium.com/\"\n  weight = 30\n"
  },
  {
    "path": "exampleSite/config/_default/menus/menus.fr.toml",
    "content": "[[main]]\nname = \"Blog\"\npageRef = \"/blog/\"\nweight = 30\n\n[[main]]\n  name = \"Documentation\"\n  pageRef = \"https://gethinode.com/docs/\"\n  weight = 40\n\n[[social]]\nname = \"LinkedIn\"\npre = \"fab linkedin\"\nurl = \"https://linkedin.com/\"\nweight = 10\n\n[[social]]\nname = \"GitHub\"\npre = \"fab fa-github\"\nurl = \"https://github.com/\"\nweight = 20\n\n[[social]]\nname = \"Medium\"\npre = \"fab medium\"\nurl = \"https://medium.com/\"\nweight = 30\n"
  },
  {
    "path": "exampleSite/config/_default/menus/menus.nl.toml",
    "content": "[[main]]\n  name = \"Blog\"\n  pageRef = \"/blog/\"\n  weight = 30\n\n[[main]]\n  name = \"Documentatie\"\n  pageRef = \"https://gethinode.com/docs/\"\n  weight = 40\n\n[[social]]\n  name = \"LinkedIn\"\n  pre = \"fab linkedin\"\n  url = \"https://linkedin.com/\"\n  weight = 10\n\n[[social]]\n  name = \"GitHub\"\n  pre = \"fab github\"\n  url = \"https://github.com/\"\n  weight = 20\n\n[[social]]\n  name = \"Medium\"\n  pre = \"fab medium\"\n  url = \"https://medium.com/\"\n  weight = 30\n"
  },
  {
    "path": "exampleSite/config/_default/netlify.toml",
    "content": "[[redirects]]\n\tfrom = '/fr/*'\n\tto = '/fr/404.html'\n\tstatus = 404\n\n[[redirects]]\n\tfrom = '/nl/*'\n\tto = '/nl/404.html'\n\tstatus = 404\n\n[[redirects]]\n\tfrom = '/en/*'\n\tto = '/en/404.html'\n\tstatus = 404\n\n[[redirects]]  # Default language should be last.\n\tfrom = '/*'\n\tto = '/en/404.html'\n\tstatus = 404"
  },
  {
    "path": "exampleSite/config/_default/params.fr.toml",
    "content": "[main]\n    titleCase = false\n"
  },
  {
    "path": "exampleSite/config/_default/params.nl.toml",
    "content": "[main]\n    titleCase = false\n"
  },
  {
    "path": "exampleSite/config/_default/params.toml",
    "content": "[main]\n    separator = \"-\"\n    description = \"Hinode is a clean documentation and blog theme for your Hugo site based on Bootstrap 5.\"\n    enableLanguageSelectionStorage = true\n    canonifyAssetsURLs = false\n    footerBelowFold = false\n    loading = \"lazy\"\n    breakpoint = \"md\"\n    titleCase = true\n    [main.padding]\n        x = 4\n        y = 4\n    [main.internalLinks]\n        validate = true\n        pretty = true\n    [main.externalLinks]\n        cue = true\n        tab = true\n    [main.build]\n        transpiler = \"dartsass\"\n        silenceDeprecations = true\n    [main.colorMode]\n        enabled = true\n        modes = [\"light\", \"dark\"]\n        toggle = true\n    [main.cards]\n        linkIcon = false\n\n[icons]\n    # Color mode toggle\n    colorModeLight       = \"sun\"\n    colorModeDark        = \"moon-stars\"\n    # Navbar\n    navbarLanguage       = \"globe2\"\n    navbarOverflow       = \"three-dots\"\n    navbarVersionCheck   = \"check\"\n    # Pagination\n    paginationFirst      = \"chevron-double-left\"\n    paginationPrev       = \"chevron-left\"\n    paginationNext       = \"chevron-right\"\n    paginationLast       = \"chevron-double-right\"\n    # Other navigation\n    breadcrumbBack       = \"chevron-left\"\n    pageNavPrev          = \"arrow-left\"\n    pageNavNext          = \"arrow-right\"\n    # Content\n    tocSort              = \"sort-down\"\n    cardReadMore         = \"chevron-right\"\n    externalLink         = \"box-arrow-up-right\"\n    testimonialNext      = \"chevron-right\"\n    testimonialQuote     = \"quote\"\n    headingAnchor        = \"link\"\n    notFoundPage         = \"link-45deg\"\n    sharingWebshare      = \"share\"\n    sharingDownload      = \"download\"\n    # Search (mod-flexsearch)\n    search          = \"search\"\n    # Testimonial carousel controls (mod-blocks)\n    carouselPrev    = \"chevron-left\"\n    carouselNext    = \"chevron-right\"\n    # CTA and contact action links (mod-blocks)\n    ctaAction       = \"chevron-right\"\n    # Preview component device tabs and error state (mod-blocks)\n    previewDesktop  = \"display\"\n    previewTablet   = \"tablet\"\n    previewMobile   = \"phone\"\n    previewError    = \"exclamation-triangle\"\n    [icons.admonition]\n        note       = \"info-circle\"\n        info       = \"info-circle\"\n        tip        = \"lightbulb\"\n        important  = \"exclamation\"\n        warning    = \"exclamation-triangle\"\n        caution    = \"hand-index-thumb\"\n    [icons.release]\n        deprecated = \"trash\"\n        feature    = \"rocket-takeoff\"\n\n[debugging]\n    showJS = false\n    showSCSS = false\n    purgeHTMLComments = true # prevents a Goldmark warning when processing HTML comments (as used by markdownlint)\n    includeSVGOrigin = true\n\n[docs]\n    basePath = \"/\"\n    github = \"https://github.com/gethinode/hinode\"\n    release = \"https://github.com/gethinode/hinode/releases/tag/\"\n    checkVersion = false\n\n[navigation]\n    anchor = true\n    logo = \"/img/logo_icon.svg\"\n    logo-mode = false\n    logo-align = \"center\"\n    logo-height = 30\n    color = \"body\"\n    fixed = true\n    overlay = false\n    overlayMode = \"dark\"\n    transparent = false\n    horizontal = false\n    offset = \"5.7rem\"\n    offsetXS = \"5.7rem\"\n    breadcrumb = true\n    toc = true\n    sidebar = true\n    size = \"md\"\n    fontsizeCollapsed = 6\n    startLevel = 2\n    endLevel = 3\n    maxNumHeadings = 9\n    [navigation.language]\n        inline = false\n    [navigation.padding]\n        x = 4\n        y = 4\n    [navigation.search]\n        enabled = true\n        modal = false\n\n[messages]\n    placement = \"bottom-right\"\n\n[pages]\n    readingTime = true\n    wordCount = true\n\n[dam]\n    dimensions = \"dimensions.yml\"\n    videoCodecs = [\n        \"webm/vp9\",\n        \"mp4/h265\",\n        \"mp4\"\n    ]\n\n[[dam.providers]]\n    name = \"Cloudinary\"\n    pattern = \"cloudinary\"\n    adapter = \"assets/adapters/cloudinary.html\"\n\n[sharing]\n    enabled = true\n    sort = \"weight\"\n    reverse = false\n    webshare = true\n\n[[sharing.providers]]\n    name = \"LinkedIn\"\n    url = \"https://www.linkedin.com/sharing/share-offsite/?url={url}\"\n    icon = \"fab linkedin\"\n    weight = 10\n\n[[sharing.providers]]\n    name = \"Twitter\"\n    url = \"https://twitter.com/home?status={url}\"\n    icon = \"fab x-twitter\"\n    weight = 20\n\n[[sharing.providers]]\n    name = \"Facebook\"\n    url = \"https://www.facebook.com/sharer.php?u={url}\"\n    icon = \"fab facebook\"\n    weight = 30\n\n[[sharing.providers]]\n    name = \"WhatsApp\"\n    url = \"whatsapp://send?text={title}%20{url}\"\n    icon = \"fab whatsapp\"\n    weight = 40\n\n[[sharing.providers]]\n    name = \"email\"\n    url = \"{url}\"\n    icon = \"link\"\n    weight = 50\n    clipboard = true\n\n[favicon]\n    logo = \"img/favicon.png\"\n    sizes = [16, 32, 48]\n\n# toml-docs-start theme-colors\n[style]\n    primary = \"#d43900\"\n    secondary = \"#6c757d\"\n    success = \"#198754\"\n    info = \"#0dcaf0\"\n    warning = \"#ffc107\"\n    danger = \"#dc3545\"\n    light = \"#f8f9fa\"\n    dark = \"#212529\"\n    themeOpacity = \"10\"\n    darkModeShade = \"20%\"\n    darkModeTint = \"40%\"\n    themeFont = \"Inter\"\n    # themeFontPath = \"https://fonts.googleapis.com/css2?family=Inter:wght@200;300;600&display=swap\" # external path\n    themeFontPath = \"/fonts\" # local path\n    themeFontPreload = \"/fonts/inter-v12-latin-regular.woff2\"\n    purge = true\n# toml-docs-end theme-colors\n\n[schema]\n    type = \"Organization\"\n    name = \"Hinode\"\n    locale = \"en-US\"\n    # twitter = \"https://twitter.com/gethinode\"\n    # linkedIn = \"\"\n    github = \"https://github.com/gethinode/hinode\"\n    section = \"blog\"\n    [schema.author]\n        name = \"Mark Dumay\"\n        # twitter = \"https://twitter.com/markdumay\"\n        linkedin = \"https://www.linkedin.com/in/markdumay/\"\n        github = \"https://github.com/markdumay\"\n    [schema.logo]\n        url = \"img/logo512x512.png\"\n        width = 512\n        height = 512\n    [schema.image]\n        url = \"img/logo1280x640.png\"\n        width = 1280\n        height = 640\n\n[opengraph]\n    images = [\"logo.png\"]\n    locale = \"en_US\"\n\n[links]\n    bs_badge_heading = \"https://getbootstrap.com/docs/5.3/components/badge/#headings\"\n    hinode_docs = \"https://gethinode.com\"\n    hugo_imaging = \"https://gohugo.io/content-management/image-processing/#imaging-configuration\"\n    mozilla_image = \"https://developer.mozilla.org/en-US/docs/Learn/HTML/Multimedia_and_embedding/Responsive_images\"\n    observatory = \"https://observatory.mozilla.org/analyze/demo.gethinode.com\"\n    pagespeed = \"https://pagespeed.web.dev/report?url=https%3A%2F%2Fdemo.gethinode.com%2F\"\n    hinode = \"https://gethinode.com\"\n\n[modules.cookieyes]\n    url = \"https://cdn-cookieyes.com/client_data/a54b5553f349dd13bd225f8e/script.js\"\n\n[modules.mermaid]\n    elk = true\n\n[modules.fontawesome]\n  defaultFamily = \"bi\"\n"
  },
  {
    "path": "exampleSite/config/_default/server.toml",
    "content": "# Auto-generated file - do not modify\n\n[[headers]]\n  for = '/**'\n\n  [headers.values]\n    Access-Control-Allow-Origin = '*'\n    Content-Security-Policy = \"\"\"\n        base-uri 'self'; \\\n        connect-src 'self' *.cookieyes.com cdn-cookieyes.com *.analytics.google.com *.google.com *.google-analytics.com *.googletagmanager.com; \\\n        default-src 'none'; \\\n        font-src 'self' fonts.gstatic.com data:; \\\n        form-action 'self'; \\\n        frame-src http: https: *.googletagmanager.com player.cloudinary.com www.youtube-nocookie.com www.youtube.com player.vimeo.com; \\\n        img-src 'self' cdn-cookieyes.com *.google-analytics.com *.googletagmanager.com googletagmanager.com ssl.gstatic.com www.gstatic.com data: *.imgix.net *.imagekit.io *.cloudinary.com i.ytimg.com tile.openstreetmap.org i.vimeocdn.com; \\\n        manifest-src 'self'; \\\n        media-src 'self'; \\\n        object-src 'none'; \\\n        script-src 'self' cdn-cookieyes.com *.google-analytics.com *.googletagmanager.com *.analytics.google.com googletagmanager.com tagmanager.google.com player.vimeo.com; \\\n        style-src 'self' 'unsafe-inline' googletagmanager.com tagmanager.google.com fonts.googleapis.com www.youtube.com; \\\n        \"\"\"\n    Permissions-Policy = 'geolocation=(), midi=(), sync-xhr=(), microphone=(), camera=(), magnetometer=(), gyroscope=(), fullscreen=(), payment=() '\n    Referrer-Policy = 'strict-origin'\n    Strict-Transport-Security = 'max-age=31536000; includeSubDomains; preload'\n    X-Content-Type-Options = 'nosniff'\n    X-Frame-Options = 'SAMEORIGIN'\n    X-XSS-Protection = '1; mode=block'\n    cache-control = 'max-age=0, no-cache, no-store, must-revalidate '\n\n[[redirects]]\n  from = '/fr/*'\n  status = 404\n  to = '/fr/404.html'\n\n[[redirects]]\n  from = '/nl/*'\n  status = 404\n  to = '/nl/404.html'\n\n[[redirects]]\n  from = '/en/*'\n  status = 404\n  to = '/en/404.html'\n\n[[redirects]]\n  from = '/*'\n  status = 404\n  to = '/en/404.html'\n\n"
  },
  {
    "path": "exampleSite/config/ci/hugo.toml",
    "content": "# cachedir default on POSIX: '/tmp/hugo_cache_runner'\n# cachedir default on Windows: '~\\AppData\\Local\\hugo_cache'\n# cachedir default on macOS: '/Users/runner/Library/Caches/hugo_cache'\n#\n# All six Hugo cache types are configured here to:\n#   - redirect assets/images from :resourceDir to :cacheDir so GitHub Actions can cache them\n#   - set maxAge = -1 across the board so --gc never prunes entries between CI runs\n\n[caches]\n  [caches.assets]\n    dir = ':cacheDir/resources/_gen' # redirect from :resourceDir to :cacheDir\n    maxAge = -1\n  [caches.getresource]\n    dir = ':cacheDir/:project'\n    maxAge = -1\n  [caches.images]\n    dir = ':cacheDir/resources/_gen' # redirect from :resourceDir to :cacheDir\n    maxAge = -1\n  [caches.misc]\n    dir = ':cacheDir/:project'\n    maxAge = -1\n  [caches.modulequeries]\n    dir = ':cacheDir/modules'\n    maxAge = -1 # override default 24h so --gc does not prune module query results\n  [caches.modules]\n    dir = ':cacheDir/modules'\n    maxAge = -1"
  },
  {
    "path": "exampleSite/config/development/params.toml",
    "content": "# Development-specific parameters for exampleSite\n\n[modules.hinode.csp]\n    frame-src = [\n        \"*.googletagmanager.com\",\n        \"player.cloudinary.com\",\n        \"www.youtube-nocookie.com\",\n        \"www.youtube.com\",\n        \"player.vimeo.com\"\n    ]\n"
  },
  {
    "path": "exampleSite/config/postcss.config.js",
    "content": "const autoprefixer = require('autoprefixer')({})\nconst cssnano = require('cssnano')({\n  preset: ['advanced', {\n    discardUnused: {\n      fontFace: false  // Preserve all @font-face declarations\n    }\n  }]\n})\nconst purgeImport = require('@fullhuman/postcss-purgecss')\nconst purgeCSSPlugin = purgeImport.purgeCSSPlugin || purgeImport.default || purgeImport\nconst purgecss = purgeCSSPlugin({\n  content: ['./hugo_stats.json'],\n  defaultExtractor: (content) => {\n    const els = JSON.parse(content).htmlElements\n    return [...(els.tags || []), ...(els.classes || []), ...(els.ids || [])]\n  },\n  dynamicAttributes: ['aria-expanded', 'data-bs-theme', 'data-bs-main-theme', 'data-bs-theme-animate', 'data-transparent', 'role'],\n  fontFace: false,\n  safelist: {\n    standard: [\n      // Bootstrap form validation\n      'was-validated',\n      // Bootstrap dynamic states\n      'show',\n      'showing',\n      'hiding',\n      'active',\n      'disabled',\n      'collapsed',\n      'collapsing',\n      // SimpleDatatables modifier classes\n      'no-header',\n      'no-footer',\n      // SimpleDatatables table rendering classes (added by JS)\n      'th-inner',\n      'sortable',\n      'sortable-center',\n      'both',\n      'desc',\n      'asc',\n      // SimpleDatatables search component\n      'search-data-table',\n      'search-input',\n      // Bootstrap utilities used by SimpleDatatables\n      'float-right',\n      'float-left'\n    ],\n    // Classes with these patterns will be preserved along with their children\n    deep: [\n      // Bootstrap components that get dynamically modified\n      /modal/,\n      /dropdown/,\n      /carousel/,\n      /tooltip/,\n      /popover/,\n      /collapse/,\n      /offcanvas/,\n      // SimpleDatatables - preserve structure and all nested elements\n      /datatable/,\n      // Bootstrap form controls (used by SimpleDatatables)\n      /form-select/,\n      /form-control/,\n      // Bootstrap button groups (used by SimpleDatatables search)\n      /btn-group/,\n      // Bootstrap responsive tables (used by list component)\n      /table-responsive/,\n      // Syntax highlighting - preserve Chroma classes and descendants\n      /chroma/,\n      /syntax-highlight/,\n      /codeblock/\n    ],\n    // Preserve any selector containing these patterns\n    greedy: [\n      // Third-party library prefixes (well-namespaced, safe to use greedy)\n      /^fa-/,              // FontAwesome\n      /^leaflet-/,         // Leaflet maps\n      /^katex-/,           // KaTeX math (note: using katex- not just katex)\n      /^mermaid/,          // Mermaid diagrams\n      /datatable/,         // SimpleDatatables (all variants: datatable-*, *-datatable, etc.)\n      /^cky-/,             // CookieYes\n\n      // Component-specific prefixes\n      /clipboard-/,        // Clipboard component\n      /command-/,          // Command component\n      /search-/,           // Search functionality (includes search-input, search-data-table)\n      /suggestion__/,      // Search suggestions (FlexSearch)\n      /testimonial-/,      // Testimonial component\n      /preview-/,          // Preview component (mod-blocks)\n\n      // Syntax highlighting - third-party engines (Chroma handled in deep)\n      /^hljs-/,            // highlight.js\n      /^language-/,        // Prism/generic\n\n      // Pagination and navigation\n      /page-item/,\n      /page-link/,\n      /pagination/,        // Bootstrap pagination classes\n      /nav-item/,\n      /nav-link/,\n      /navbar-/,\n      /^nav-/,             // Nav variant classes (nav-callout, nav-panel, nav-pills, nav-tabs, nav-underline)\n\n      // Bootstrap responsive tables\n      /table-responsive/,  // All table-responsive-* variants and attribute selectors\n\n      // Color mode toggle - d-none-main-* classes plus [data-bs-main-theme=\"dark\"] compound selectors\n      /d-none-main/,\n\n      // Bootstrap transitions and utilities that get added via JS\n      /fade/,\n      /^translate/         // Bootstrap utilities\n    ]\n  }\n})\n\nmodule.exports = {\n  plugins: [\n    autoprefixer,\n    cssnano,\n    purgecss\n  ]\n}\n"
  },
  {
    "path": "exampleSite/content/en/_index.md",
    "content": "---\nauthor: Mark Dumay\ntitle: Welcome to Hinode!\ndescription: A clean documentation and blog theme for your Hugo site based on Bootstrap 5.\ncontent_blocks:\n  - _bookshop_name: hero\n    heading:\n      title: Welcome to Hinode!\n      content: |-\n        A clean documentation and blog theme for your Hugo site based on Bootstrap 5.\n      width: 6\n    background:\n      color: primary\n      subtle: true\n    illustration:\n      image: /img/sunrise.jpg\n      ratio: 16x9\n    width: 8\n    links:\n      - title: About\n        url: about\n        icon: chevron-right\n    orientation: horizontal\n    justify: center\n\n  - _bookshop_name: articles\n    heading:\n      title: Blog\n      align: start\n    input:\n      section: blog\n      reverse: true\n      sort: date\n    hide_empty: false\n    header_style: none\n    more:\n      title: More Posts\n    padding: 0\n    limit: 3\n    class: border-0 card-zoom card-body-margin\n---\n"
  },
  {
    "path": "exampleSite/content/en/about.md",
    "content": "---\ntitle: About\ndescription: Hinode is a clean documentation and blog theme for your Hugo site based on Bootstrap 5.\ndate: 2022-04-11\nupdated: 2023-08-02\nshowComments: false\n---\n\n{{< image src=\"/img/logo_var.svg#logo\" class=\"img-fluid w-50\" wrapper=\"text-center\" >}}\n\n{{< card-group align=\"center\" class=\"border-0\" padding=\"3\" >}}\n    {{< card title=\"Bootstrap framework\" icon=\"fab bootstrap\" >}}\n        Build fast, responsive sites with Bootstrap 5. Easily customize your site with the source Sass files.\n    {{< /card >}}\n    {{< card title=\"Full text search\" icon=\"fas magnifying-glass\" >}}\n        Search your site with FlexSearch, a full-text search library with zero dependencies.\n    {{< /card >}}\n    {{< card title=\"Development tools\" icon=\"fas code\" >}}\n        Use Node Package Manager to automate the build process and to keep track of dependencies.\n    {{< /card >}}\n{{< /card-group >}}\n\nAdditional features include:\n\n* Switching between light mode and dark mode\n* Support for multiple languages\n* Reusable Bootstrap components through configurable shortcodes and partials\n* Versioned documentation, including sidebar navigation and version switcher\n* Responsive image handling for multiple screen sizes and resolutions\n* Optimized search results, scoring 100 points for SEO on [PageSpeed Insights]({{% param \"links.pagespeed\" %}})\n* Secure by default, scoring A+ on [Mozilla Observatory test]({{% param \"links.observatory\" %}})\n{.tickmark}\n"
  },
  {
    "path": "exampleSite/content/en/blog/_index.md",
    "content": "---\nauthor: Mark Dumay\ntitle: Blog\nnested: true\n---\n"
  },
  {
    "path": "exampleSite/content/en/blog/first-post.md",
    "content": "---\nauthor: Mark Dumay\ntitle: First post\ndate: 2022-10-01\ndescription: This is the first blog post.\ntags: [\"blog\"]\ncategory: featured\nthumbnail:\n  url: img/notepad.jpg\n  author: Frederick Medina\n  authorURL: https://unsplash.com/@frederickjmedina\n  origin: Unsplash\n  originURL: https://unsplash.com/photos/PdfRE-xB--s\n---\n\n## First paragraph {{< icon \"fas users\" >}}\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque vulputate, ante in luctus congue, leo risus semper justo, vel consequat sapien lectus quis ipsum. In imperdiet urna justo. Nulla vel pellentesque ipsum. Cras congue feugiat dolor ac aliquam. Pellentesque eget dui venenatis, ultrices urna ac, vehicula nibh. Curabitur est lectus, dapibus eu vehicula non, malesuada et dui.\n\n### Nested paragraph {{< icon \"fas link\" >}}\n\nNam enim nulla, egestas et nunc non, elementum aliquet justo. Mauris euismod mauris sapien, eget vestibulum odio dictum sit amet. Morbi nisl elit, placerat at auctor in, finibus ac neque. Curabitur placerat feugiat risus non vestibulum. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque quis cursus est, nec posuere libero.\n\n## {{< icon \"fas globe\" >}} Second paragraph\n\nIn ac lobortis diam. Curabitur id dui ac nunc mattis rhoncus a sed lorem. Sed lobortis sem turpis, at posuere enim dignissim et. Vivamus fermentum justo quis volutpat volutpat. Proin eget vehicula neque, ut tempus urna. Duis ac ex vel leo pharetra lobortis et vitae lacus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Aliquam erat volutpat. Suspendisse ullamcorper ultrices elementum. Suspendisse mi elit, commodo at varius a, cursus a ligula. Sed et mattis elit, eu luctus arcu. Cras a porttitor libero. Vestibulum tincidunt sed magna at dapibus. Sed quis orci eu lacus aliquam tristique. Integer porttitor ultrices ipsum quis porttitor. Etiam a sodales ligula.\n"
  },
  {
    "path": "exampleSite/content/en/blog/fourth-post.md",
    "content": "---\nauthor: Mark Dumay\ntitle: Fourth post\ndate: 2023-01-01\ndescription: This is the fourth blog post. It is excluded from the search index.\ntags: [\"blog\"]\ncategory: tutorial\nsearchExclude: true\nthumbnail:\n  url: img/flowers.jpg\n  author: Arvee Marie\n  authorURL: https://unsplash.com/@flutterhappy\n  origin: Unsplash\n  originURL: https://unsplash.com/photos/YnfGtpt2gf4\n---\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam finibus libero in felis accumsan, vitae imperdiet metus vehicula. Quisque nec dignissim purus. In id dui porta sapien posuere viverra nec vel nisi. Sed varius tincidunt lectus, quis sagittis felis interdum id. Proin purus odio, ultrices auctor libero convallis, volutpat gravida turpis. Ut commodo metus orci, quis sagittis lectus rhoncus non. Nulla et lectus tortor. Suspendisse quam felis, molestie non odio quis, consequat venenatis orci. Etiam sed turpis sit amet elit scelerisque imperdiet. Sed suscipit felis non nibh suscipit egestas. Nulla sodales libero non rhoncus consequat. Nunc in elit at est cursus congue ut ac velit. Cras luctus libero augue, id semper sapien volutpat ultrices.\n\nPellentesque sit amet sollicitudin nibh. Cras in dolor eget quam feugiat ultricies in ac lectus. Ut venenatis vitae justo quis pretium. Pellentesque vulputate nulla ac est iaculis vulputate. Proin pellentesque sem nec molestie imperdiet. Duis eu molestie sapien, vel ultricies lacus. Donec in felis tempus, rutrum ipsum at, fermentum felis. Praesent mi odio, semper non vulputate vitae, vulputate quis ex.\n\nNunc rhoncus eleifend gravida. Aliquam feugiat tristique pellentesque. Pellentesque vel elit sed nulla commodo convallis. Curabitur placerat sapien augue, ac semper metus volutpat non. Sed semper ultricies enim, consequat convallis justo placerat eget. Ut fermentum leo facilisis metus congue commodo. Vestibulum consectetur magna vitae ullamcorper sodales. Nulla lobortis aliquam odio id tincidunt. Suspendisse efficitur auctor tortor non consequat. Quisque sit amet posuere lorem, convallis bibendum nisi. Proin ullamcorper justo tempus dignissim scelerisque. Quisque sit amet sapien libero. Phasellus eget enim velit. Proin ut fermentum dui. Proin gravida tortor in ligula lacinia, id dapibus dui tincidunt. Mauris suscipit nisi et urna consectetur, non venenatis nisi euismod.\n"
  },
  {
    "path": "exampleSite/content/en/blog/second-post.md",
    "content": "---\nauthor: Mark Dumay\ntitle: Second post\ndate: 2022-11-01\ndescription: This is the second blog post.\ntags: [\"blog\"]\ncategory: featured\nthumbnail:\n  url: img/phone.jpg\n  author: Thom\n  authorURL: https://unsplash.com/@thomweerd\n  origin: Unsplash\n  originURL: https://unsplash.com/photos/Zdcq3iKly6g\n---\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non sollicitudin sapien. Ut porttitor lectus eu tempor ultricies. Sed semper tincidunt nibh pellentesque condimentum. Vivamus dictum sem eu rhoncus semper. Vestibulum convallis congue tincidunt. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Mauris magna urna, egestas sit amet ligula quis, viverra semper arcu. Praesent laoreet nunc vitae nulla posuere facilisis.\n\nNunc eget dignissim ex, sed lobortis leo. Suspendisse mollis posuere tellus, in viverra nunc ullamcorper vitae. Nam vel tempor arcu, in imperdiet odio. Fusce malesuada vehicula odio, in iaculis nulla congue eget. Quisque id odio id nisl facilisis posuere porta sit amet mauris. Curabitur lorem leo, tempus id rhoncus eget, placerat vitae lectus. Morbi eu aliquet enim. Nulla malesuada laoreet sodales.\n\nNunc volutpat dui in elit euismod, sed egestas purus tristique. Nam in condimentum mauris. Praesent nec suscipit enim. Aliquam dolor ipsum, faucibus vitae purus ac, congue egestas nisi. Donec hendrerit erat eu arcu porttitor rhoncus. Nunc a odio bibendum metus semper pellentesque. Sed at sapien ut est semper eleifend. Aliquam lorem libero, porttitor nec tristique ut, auctor vitae ipsum. Suspendisse pretium pharetra rutrum. Nulla tincidunt tempus enim eu sagittis. Maecenas pulvinar metus a urna mattis dictum sed id tellus.\n"
  },
  {
    "path": "exampleSite/content/en/blog/third-post.md",
    "content": "---\nauthor: Mark Dumay\ntitle: third post\ndate: 2022-12-01\ndescription: This is the third blog post. It uses exact case for the title.\ntags: [\"blog\"]\ncategory: tutorial\nexact: true\nthumbnail:\n  url: https://picsum.photos/id/184/4288/2848.jpg\n  author: Tim de Groot\n  authorURL: https://unsplash.com/@timdegroot\n  origin: Unsplash\n  originURL: https://unsplash.com/photos/yNGQ830uFB4\n---\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent id scelerisque ligula. Vestibulum eu lorem tortor. Suspendisse tristique ultrices mauris, non maximus lorem faucibus in. Suspendisse sagittis eleifend dapibus. Curabitur dignissim luctus sapien eu consequat. Proin congue dui vel ipsum bibendum varius. Pellentesque cursus nisi metus, egestas eleifend ipsum sollicitudin vitae. Sed vitae erat elementum, semper turpis sed, molestie nulla.\n\nNulla molestie ultrices vehicula. Etiam iaculis, erat a blandit blandit, nulla tellus dapibus ligula, vitae venenatis turpis diam non felis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed vitae arcu in justo iaculis egestas. In imperdiet arcu vitae pharetra commodo. Quisque ut erat eget nisl semper laoreet vitae eget ligula. Mauris bibendum purus nec vulputate faucibus. In luctus sagittis ante, quis laoreet orci bibendum vitae. Nam at odio accumsan, tincidunt eros at, lacinia metus. In et ultricies sapien, a mollis est. Nunc convallis orci eu tristique euismod. Proin vel ullamcorper diam. Quisque et semper orci. Proin pharetra lorem justo, id malesuada erat feugiat sit amet. Praesent bibendum mi at lorem volutpat suscipit. Morbi sed libero elit.\n\nNunc sodales est eu ipsum volutpat, in mollis dui facilisis. Nulla faucibus interdum lectus, a condimentum elit vulputate eu. Nunc ipsum risus, suscipit sit amet nulla ac, pulvinar maximus nulla. In venenatis diam erat, non elementum ante dignissim posuere. Aliquam sem justo, luctus at vestibulum ut, egestas ut quam. Quisque a dolor viverra, aliquam nunc vel, lacinia nulla. In id magna magna. Morbi dapibus pretium sollicitudin. Morbi volutpat augue at felis tristique, quis euismod tellus vulputate. Morbi dui lacus, aliquam eget quam vel, vestibulum faucibus enim. Proin porta pretium metus id venenatis. Aliquam nec tempor lorem. Vivamus euismod est varius sagittis placerat. Maecenas tincidunt elementum libero, at imperdiet elit feugiat vel.\n"
  },
  {
    "path": "exampleSite/content/en/browserconfig.md",
    "content": "---\ndraft: false\noutputs:\n- xml\nurl: browserconfig.xml\n---\n"
  },
  {
    "path": "exampleSite/content/en/cookies.md",
    "content": "---\ntitle: Cookie Policy\ndescription: Cookie policy of gethinode.com\ndate: 2024-09-19\nlayout: docs\n---\n<!-- markdownlint-disable MD036 -->\n*Effective Date 19-Sep-2024*\n\n## What are cookies?\n\nThis Cookie Policy explains what cookies are and how we use them, the types of cookies we use i.e, the information we collect using cookies and how that information is used, and how to manage the cookie settings.\n\nCookies are small text files that are used to store small pieces of information. They are stored on your device when the website is loaded on your browser. These cookies help us make the website function properly, make it more secure, provide better user experience, and understand how the website performs and to analyze what works and where it needs improvement.\n\n## How do we use cookies?\n\nAs most of the online services, our website uses first-party and third-party cookies for several purposes. First-party cookies are mostly necessary for the website to function the right way, and they do not collect any of your personally identifiable data.\n\nThe third-party cookies used on our website are mainly for understanding how the website performs, how you interact with our website, keeping our services secure, providing advertisements that are relevant to you, and all in all providing you with a better and improved user experience and help speed up your future interactions with our website.\n\n## Types of Cookies we use\n\n{{< cky-audit >}}\n\n## Manage cookie preferences\n\n{{< cky-banner >}}\n\nYou can change your cookie preferences any time by clicking the above button. This will let you revisit the cookie consent banner and change your preferences or withdraw your consent right away.\n\nIn addition to this, different browsers provide different methods to block and delete cookies used by websites. You can change the settings of your browser to block/delete the cookies. Listed below are the links to the support documents on how to manage and delete cookies from the major web browsers.\n\nChrome: https://support.google.com/accounts/answer/32050\n\nSafari: https://support.apple.com/en-in/guide/safari/sfri11471/mac\n\nFirefox: https://support.mozilla.org/en-US/kb/clear-cookies-and-site-data-firefox?redirectslug=delete-cookies-remove-info-websites-stored&redirectlocale=en-US\n\nInternet Explorer: https://support.microsoft.com/en-us/topic/how-to-delete-cookie-files-in-internet-explorer-bca9446f-d873-78de-77ba-d42645fa52fc\n\nIf you are using any other web browser, please visit your browser’s official support documents.\n\n*Cookie Policy generated by {{< link \"https://www.cookieyes.com\" >}}CookieYes - Cookie Policy Generator{{< /link >}}.*\n"
  },
  {
    "path": "exampleSite/content/en/privacy.md",
    "content": "---\ntitle: Privacy Policy\ndescription: Privacy policy of gethinode.com\ndate: 2024-09-19\nlayout: docs\n---\n<!-- markdownlint-disable MD036 -->\n*Effective Date 19-Sep-2024*\n\nThis Privacy Policy describes the policies of gethinode.com on the collection, use and disclosure of your information that we collect when you use our website (https://gethinode.com, referred to as the “Service”). By accessing or using the Service, you are consenting to the collection, use and disclosure of your information in accordance with this Privacy Policy. If you do not consent to the same, please do not access or use the Service.\n\nWe may modify this Privacy Policy at any time without any prior notice to you and will post the revised Privacy Policy on the Service. The revised Policy will be effective 180 days from when the revised Policy is posted in the Service and your continued access or use of the Service after such time will constitute your acceptance of the revised Privacy Policy. We therefore recommend that you periodically review this page.\n\n## How we share your information\n\nWe will not transfer your personal information to any third party without seeking your consent, except in limited circumstances as described\nbelow:\n\n- Analytics\n\nWe require such third party’s to use the personal information we transfer to them only for the purpose for which it was transferred and not to retain it for longer than is required for fulfilling the said purpose.\n\nWe may also disclose your personal information for the following: (1) to comply with applicable law, regulation, court order or other legal process; (2) to enforce your agreements with us, including this Privacy Policy; or (3) to respond to claims that your use of the Service violates any third-party rights. If the Service or our company is merged or acquired with another company, your information will be one of the assets that is transferred to the new owner.\n\n## Your rights\n\nDepending on the law that applies, you may have a right to access and rectify or erase your personal data or receive a copy of your personal data, restrict or object to the active processing of your data, ask us to share (port) your personal information to another entity,withdraw any consent you provided to us to process your data, a right to lodge a complaint with a statutory authority and such other rights as may be relevant under applicable laws. <!-- To exercise these rights, you can write to us at privacy@gethinode.com. We will respond to your request in accordance with applicable law. -->\n\nDo note that if you do not allow us to collect or process the required personal information or withdraw the consent to process the same for the required purposes, you may not be able to access or use the services for which your information was sought.\n\n## Cookies etc.\n\nTo learn more about how we use these and your choices in relation to these tracking technologies, please refer to our {{< link \"cookies\" >}}Cookie Policy/Settings{{< /link >}}.\n\n## Security\n\nThe security of your information is important to us and we will use reasonable security measures to prevent the loss, misuse or unauthorized alteration of your information under our control. However, given the inherent risks, we cannot guarantee absolute security and consequently, we cannot ensure or warrant the security of any information you transmit to us and you do so at your own risk.\n\n## Third party links & use of your information\n\nOur Service may contain links to other websites that are not operated by us. This Privacy Policy does not address the privacy policy and other practices of any third parties, including any third party operating any website or service that may be accessible via a link on the Service. We strongly advise you to review the privacy policy of every site you visit. We have no control over and assume no responsibility for the content, privacy policies or practices of any third party sites or services.\n\n<!-- ## Grievance / Data Protection Officer\n\nIf you have any queries or concerns about the processing of your information that is available with us, you may email us at privacy@gethinode.com. We will address your concerns in accordance with applicable law. -->\n\n*Privacy Policy generated with {{< link \"https://www.cookieyes.com\" >}}CookieYes{{< /link >}}.*\n"
  },
  {
    "path": "exampleSite/content/en/team/_content.gotmpl",
    "content": "{{- $contacts := partial \"utilities/GetI18nData.html\" (dict \"page\" site \"data\" \"contacts\") }}\n\n{{ range $contacts  }}\n    {{ $content := dict \"mediaType\" \"text/markdown\" \"value\" .biography }}\n    {{ $page := dict\n        \"content\"     $content\n        \"description\" .function\n        \"kind\"        \"page\"\n        \"type\"        \"contact\"\n        \"path\"        (.name | anchorize)\n        \"slug\"        (.name | anchorize)\n        \"title\"       .name\n        \"params\"      (merge . (dict \"thumbnail\" .image))\n    }}\n    {{ $.AddPage $page }}\n{{ end }}\n"
  },
  {
    "path": "exampleSite/content/en/team/_index.en.md",
    "content": "---\n_schema: default\ntitle: Team\ndate:\ndescription: Meet our team of experts.\ncontent_blocks:\n  - _bookshop_name: team\n    heading:\n      title: Meet our team\n      content: >-\n        Our team consists of seasoned experts in their field.\n    input:\n      section: team\n    cols: 5\n    header_style: none\n    padding: 0\n    class: card-zoom border-0\n---\n"
  },
  {
    "path": "exampleSite/content/fr/_index.md",
    "content": "---\nauthor: Mark Dumay\ntitle: Bienvenue sur Hinode!\ndescription: Un thème de blog et de documentation pour Hugo basé sur Bootstrap 5.\ncontent_blocks:\n  - _bookshop_name: hero\n    heading:\n      title: Bienvenue sur Hinode!\n      content: |-\n        Un thème de blog et de documentation pour Hugo basé sur Bootstrap 5.\n      width: 6\n    background:\n      color: primary\n      subtle: true\n    illustration:\n      image: /img/sunrise.jpg\n      ratio: 16x9\n    width: 8\n    links:\n      - title: À propos\n        url: \"/fr/a-propos/\"\n        icon: chevron-right\n    orientation: horizontal\n    justify: center\n\n  - _bookshop_name: articles\n    heading:\n      title: Articles de blog\n      align: start\n    input:\n      section: blog\n      reverse: true\n      sort: date\n    hide_empty: false\n    header_style: none\n    more:\n      title: Plus d'articles\n    padding: 0\n    limit: 3\n    class: border-0 card-zoom card-body-margin\n---\n"
  },
  {
    "path": "exampleSite/content/fr/about.md",
    "content": "---\nslug: a-propos\ntitle: À propos\ndescription: Un thème de blog et de documentation pour Hugo basé sur Bootstrap 5.\ndate: 2023-02-17\nupdated: 2023-08-02\nshowComments: false\n---\n\n{{< image src=\"/img/logo_var.svg#logo\" class=\"img-fluid w-50\" wrapper=\"text-center\" >}}\n\n{{< card-group align=\"center\" class=\"border-0\" padding=\"3\" >}}\n    {{< card title=\"Framework Bootstrap\" icon=\"fab bootstrap\" >}}\n        Créez des sites rapides et réactifs avec Bootstrap 5. Personnalisez facilement votre site avec les fichiers source Sass.\n    {{< /card >}}\n    {{< card title=\"Recherche en texte intégral\" icon=\"fas magnifying-glass\" >}}\n        Recherchez votre site avec FlexSearch, une bibliothèque de recherche en texte intégral avec zéro dépendances.\n    {{< /card >}}\n    {{< card title=\"Outils de développement\" icon=\"fas code\" >}}\n        Utilisez Node Package Manager pour automatiser le processus de construction et suivre les dépendances.\n    {{< /card >}}\n{{< /card-group >}}\n\nLes fonctionnalités supplémentaires incluent:\n\n- Passer du mode clair au mode sombre\n- Prise en charge de plusieurs langues\n- Composants bootstrap réutilisables à travers des codes et partiels configurables\n- Documentation versionnée, incluant une navigation latérale et un sélecteur de version.\n- Gestion d'images adaptatives pour plusieurs tailles d'écran et résolutions.\n- Résultats de recherche optimisés, obtenant un score de 100 points pour le référencement (SEO) sur [PageSpeed Insights]({{% param \"links.pagespeed\" %}}).\n- Sécurisé par défaut, obtenant un score A+ au test [Mozilla Observatory]({{% param \"links.observatory\" %}})\n{.tickmark}\n"
  },
  {
    "path": "exampleSite/content/fr/blog/_index.md",
    "content": "---\nauthor: Mark Dumay\ntitle: Blog\n---\n"
  },
  {
    "path": "exampleSite/content/fr/blog/first-post.md",
    "content": "---\nauthor: Mark Dumay\ntitle: Premier article\nslug: premier-article\ndate: 2022-10-01\ndescription: Ceci est mon premier article.\ntags: [\"blog\"]\nthumbnail:\n  url: img/notepad.jpg\n  author: Frederick Medina\n  authorURL: https://unsplash.com/@frederickjmedina\n  origin: Unsplash\n  originURL: https://unsplash.com/photos/PdfRE-xB--s\n---\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque vulputate, ante in luctus congue, leo risus semper justo, vel consequat sapien lectus quis ipsum. In imperdiet urna justo. Nulla vel pellentesque ipsum. Cras congue feugiat dolor ac aliquam. Pellentesque eget dui venenatis, ultrices urna ac, vehicula nibh. Curabitur est lectus, dapibus eu vehicula non, malesuada et dui. Nam enim nulla, egestas et nunc non, elementum aliquet justo. Mauris euismod mauris sapien, eget vestibulum odio dictum sit amet. Morbi nisl elit, placerat at auctor in, finibus ac neque. Curabitur placerat feugiat risus non vestibulum. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque quis cursus est, nec posuere libero.\n\nIn ac lobortis diam. Curabitur id dui ac nunc mattis rhoncus a sed lorem. Sed lobortis sem turpis, at posuere enim dignissim et. Vivamus fermentum justo quis volutpat volutpat. Proin eget vehicula neque, ut tempus urna. Duis ac ex vel leo pharetra lobortis et vitae lacus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Aliquam erat volutpat. Suspendisse ullamcorper ultrices elementum. Suspendisse mi elit, commodo at varius a, cursus a ligula. Sed et mattis elit, eu luctus arcu. Cras a porttitor libero. Vestibulum tincidunt sed magna at dapibus. Sed quis orci eu lacus aliquam tristique. Integer porttitor ultrices ipsum quis porttitor. Etiam a sodales ligula.\n"
  },
  {
    "path": "exampleSite/content/fr/blog/fourth-post.md",
    "content": "---\nauthor: Mark Dumay\ntitle: Quatrième article (exclu de la recherche)\nslug: quatrieme-article\ndate: 2023-01-01\ndescription: Ceci est mon quatrième article de blog. Il est exclu de l'index de recherche.\ntags: [\"blog\"]\nsearchExclude: true\nthumbnail:\n  url: img/flowers.jpg\n  author: Arvee Marie\n  authorURL: https://unsplash.com/@flutterhappy\n  origin: Unsplash\n  originURL: https://unsplash.com/photos/YnfGtpt2gf4\n---\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam finibus libero in felis accumsan, vitae imperdiet metus vehicula. Quisque nec dignissim purus. In id dui porta sapien posuere viverra nec vel nisi. Sed varius tincidunt lectus, quis sagittis felis interdum id. Proin purus odio, ultrices auctor libero convallis, volutpat gravida turpis. Ut commodo metus orci, quis sagittis lectus rhoncus non. Nulla et lectus tortor. Suspendisse quam felis, molestie non odio quis, consequat venenatis orci. Etiam sed turpis sit amet elit scelerisque imperdiet. Sed suscipit felis non nibh suscipit egestas. Nulla sodales libero non rhoncus consequat. Nunc in elit at est cursus congue ut ac velit. Cras luctus libero augue, id semper sapien volutpat ultrices.\n\nPellentesque sit amet sollicitudin nibh. Cras in dolor eget quam feugiat ultricies in ac lectus. Ut venenatis vitae justo quis pretium. Pellentesque vulputate nulla ac est iaculis vulputate. Proin pellentesque sem nec molestie imperdiet. Duis eu molestie sapien, vel ultricies lacus. Donec in felis tempus, rutrum ipsum at, fermentum felis. Praesent mi odio, semper non vulputate vitae, vulputate quis ex.\n\nNunc rhoncus eleifend gravida. Aliquam feugiat tristique pellentesque. Pellentesque vel elit sed nulla commodo convallis. Curabitur placerat sapien augue, ac semper metus volutpat non. Sed semper ultricies enim, consequat convallis justo placerat eget. Ut fermentum leo facilisis metus congue commodo. Vestibulum consectetur magna vitae ullamcorper sodales. Nulla lobortis aliquam odio id tincidunt. Suspendisse efficitur auctor tortor non consequat. Quisque sit amet posuere lorem, convallis bibendum nisi. Proin ullamcorper justo tempus dignissim scelerisque. Quisque sit amet sapien libero. Phasellus eget enim velit. Proin ut fermentum dui. Proin gravida tortor in ligula lacinia, id dapibus dui tincidunt. Mauris suscipit nisi et urna consectetur, non venenatis nisi euismod.\n"
  },
  {
    "path": "exampleSite/content/fr/blog/second-post.md",
    "content": "---\nauthor: Mark Dumay\ntitle: Deuxième article\nslug: deuxieme-article\ndate: 2022-11-01\ndescription: Ceci est mon deuxième article.\ntags: [\"blog\"]\nthumbnail:\n  url: img/phone.jpg\n  author: Thom\n  authorURL: https://unsplash.com/@thomweerd\n  origin: Unsplash\n  originURL: https://unsplash.com/photos/Zdcq3iKly6g\n---\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non sollicitudin sapien. Ut porttitor lectus eu tempor ultricies. Sed semper tincidunt nibh pellentesque condimentum. Vivamus dictum sem eu rhoncus semper. Vestibulum convallis congue tincidunt. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Mauris magna urna, egestas sit amet ligula quis, viverra semper arcu. Praesent laoreet nunc vitae nulla posuere facilisis.\n\nNunc eget dignissim ex, sed lobortis leo. Suspendisse mollis posuere tellus, in viverra nunc ullamcorper vitae. Nam vel tempor arcu, in imperdiet odio. Fusce malesuada vehicula odio, in iaculis nulla congue eget. Quisque id odio id nisl facilisis posuere porta sit amet mauris. Curabitur lorem leo, tempus id rhoncus eget, placerat vitae lectus. Morbi eu aliquet enim. Nulla malesuada laoreet sodales.\n\nNunc volutpat dui in elit euismod, sed egestas purus tristique. Nam in condimentum mauris. Praesent nec suscipit enim. Aliquam dolor ipsum, faucibus vitae purus ac, congue egestas nisi. Donec hendrerit erat eu arcu porttitor rhoncus. Nunc a odio bibendum metus semper pellentesque. Sed at sapien ut est semper eleifend. Aliquam lorem libero, porttitor nec tristique ut, auctor vitae ipsum. Suspendisse pretium pharetra rutrum. Nulla tincidunt tempus enim eu sagittis. Maecenas pulvinar metus a urna mattis dictum sed id tellus.\n"
  },
  {
    "path": "exampleSite/content/fr/blog/third-post.md",
    "content": "---\nauthor: Mark Dumay\ntitle: Troisième article\nslug: troisieme-article\ndate: 2022-12-01\ndescription: Ceci est mon troisième article.\ntags: [\"blog\"]\nthumbnail:\n  url: https://picsum.photos/id/184/4288/2848.jpg\n  author: Tim de Groot\n  authorURL: https://unsplash.com/@timdegroot\n  origin: Unsplash\n  originURL: https://unsplash.com/photos/yNGQ830uFB4\n---\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent id scelerisque ligula. Vestibulum eu lorem tortor. Suspendisse tristique ultrices mauris, non maximus lorem faucibus in. Suspendisse sagittis eleifend dapibus. Curabitur dignissim luctus sapien eu consequat. Proin congue dui vel ipsum bibendum varius. Pellentesque cursus nisi metus, egestas eleifend ipsum sollicitudin vitae. Sed vitae erat elementum, semper turpis sed, molestie nulla.\n\nNulla molestie ultrices vehicula. Etiam iaculis, erat a blandit blandit, nulla tellus dapibus ligula, vitae venenatis turpis diam non felis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed vitae arcu in justo iaculis egestas. In imperdiet arcu vitae pharetra commodo. Quisque ut erat eget nisl semper laoreet vitae eget ligula. Mauris bibendum purus nec vulputate faucibus. In luctus sagittis ante, quis laoreet orci bibendum vitae. Nam at odio accumsan, tincidunt eros at, lacinia metus. In et ultricies sapien, a mollis est. Nunc convallis orci eu tristique euismod. Proin vel ullamcorper diam. Quisque et semper orci. Proin pharetra lorem justo, id malesuada erat feugiat sit amet. Praesent bibendum mi at lorem volutpat suscipit. Morbi sed libero elit.\n\nNunc sodales est eu ipsum volutpat, in mollis dui facilisis. Nulla faucibus interdum lectus, a condimentum elit vulputate eu. Nunc ipsum risus, suscipit sit amet nulla ac, pulvinar maximus nulla. In venenatis diam erat, non elementum ante dignissim posuere. Aliquam sem justo, luctus at vestibulum ut, egestas ut quam. Quisque a dolor viverra, aliquam nunc vel, lacinia nulla. In id magna magna. Morbi dapibus pretium sollicitudin. Morbi volutpat augue at felis tristique, quis euismod tellus vulputate. Morbi dui lacus, aliquam eget quam vel, vestibulum faucibus enim. Proin porta pretium metus id venenatis. Aliquam nec tempor lorem. Vivamus euismod est varius sagittis placerat. Maecenas tincidunt elementum libero, at imperdiet elit feugiat vel.\n"
  },
  {
    "path": "exampleSite/content/fr/browserconfig.md",
    "content": "---\ndraft: false\noutputs:\n- xml\nurl: browserconfig.xml\n---\n"
  },
  {
    "path": "exampleSite/content/fr/cookies.md",
    "content": "---\ntitle: Politique de Cookies\ndescription: Politique de cookies de gethinode.com\ndate: 2024-09-19\nlayout: docs\n---\n<!-- markdownlint-disable MD036 -->\n*Date d'entrée en vigueur : 19-Sep-2024*\n\n## Que sont les cookies ?\n\nCette Politique de Cookies explique ce que sont les cookies et comment nous les utilisons, les types de cookies que nous utilisons, c'est-à-dire les informations que nous collectons à l'aide des cookies, la manière dont ces informations sont utilisées, et comment gérer les paramètres des cookies.\n\nLes cookies sont de petits fichiers texte utilisés pour stocker de petites quantités d'informations. Ils sont stockés sur votre appareil lorsque le site web se charge dans votre navigateur. Ces cookies nous aident à faire fonctionner le site correctement, à le rendre plus sécurisé, à offrir une meilleure expérience utilisateur, à comprendre comment le site fonctionne et à analyser ce qui fonctionne et ce qui doit être amélioré.\n\n## Comment utilisons-nous les cookies ?\n\nComme la plupart des services en ligne, notre site web utilise des cookies de première partie et de tierce partie pour plusieurs raisons. Les cookies de première partie sont principalement nécessaires pour que le site web fonctionne correctement et ne collectent aucune de vos données personnelles identifiables.\n\nLes cookies de tierce partie utilisés sur notre site web servent principalement à comprendre les performances du site, à savoir comment vous interagissez avec notre site, à maintenir la sécurité de nos services, à diffuser des publicités pertinentes pour vous, et dans l’ensemble à vous offrir une meilleure expérience utilisateur et à accélérer vos interactions futures avec notre site.\n\n## Types de cookies que nous utilisons\n\n{{< cky-audit >}}\n\n## Gérer les préférences des cookies\n\n{{< cky-banner >}}\n\nVous pouvez modifier vos préférences en matière de cookies à tout moment en cliquant sur le bouton ci-dessus. Cela vous permettra de revoir la bannière de consentement aux cookies et de modifier vos préférences ou de retirer votre consentement immédiatement.\n\nEn plus de cela, les différents navigateurs offrent différentes méthodes pour bloquer et supprimer les cookies utilisés par les sites web. Vous pouvez modifier les paramètres de votre navigateur pour bloquer/supprimer les cookies. Vous trouverez ci-dessous les liens vers les documents de support sur la gestion et la suppression des cookies des principaux navigateurs web.\n\nChrome : https://support.google.com/accounts/answer/32050\n\nSafari : https://support.apple.com/fr-fr/guide/safari/sfri11471/mac\n\nFirefox : https://support.mozilla.org/fr/kb/effacer-cookies-donnees-sites-firefox\n\nInternet Explorer : https://support.microsoft.com/fr-fr/topic/supprimer-les-fichiers-cookies-dans-internet-explorer-bca9446f-d873-78de-77ba-d42645fa52fc\n\nSi vous utilisez un autre navigateur, veuillez consulter les documents d'assistance officiels de votre navigateur.\n\n*Politique de Cookies générée par {{< link \"https://www.cookieyes.com\" >}}CookieYes - Générateur de Politique de Cookies{{< /link >}}.*\n"
  },
  {
    "path": "exampleSite/content/fr/privacy.md",
    "content": "---\ntitle: Politique de Confidentialité\ndescription: Politique de confidentialité de gethinode.com\ndate: 2024-09-19\nlayout: docs\n---\n<!-- markdownlint-disable MD036 -->\n*Date d'entrée en vigueur : 19-Sep-2024*\n\nCette Politique de Confidentialité décrit les politiques de gethinode.com concernant la collecte, l'utilisation et la divulgation de vos informations que nous collectons lorsque vous utilisez notre site web (https://gethinode.com, désigné comme le « Service »). En accédant ou en utilisant le Service, vous consentez à la collecte, à l'utilisation et à la divulgation de vos informations conformément à cette Politique de Confidentialité. Si vous ne consentez pas à cela, veuillez ne pas accéder ou utiliser le Service.\n\nNous pouvons modifier cette Politique de Confidentialité à tout moment sans préavis préalable et publierons la Politique de Confidentialité révisée sur le Service. La Politique révisée sera effective 180 jours après sa publication sur le Service et votre accès ou utilisation continu(e) du Service après ce délai constituera votre acceptation de la Politique de Confidentialité révisée. Nous vous recommandons donc de consulter régulièrement cette page.\n\n## Comment nous partageons vos informations\n\nNous ne transférerons pas vos informations personnelles à des tiers sans obtenir votre consentement, sauf dans les circonstances limitées décrites ci-dessous :\n\n- Analyses\n\nNous demandons à ces tiers d'utiliser les informations personnelles que nous leur transférons uniquement aux fins pour lesquelles elles ont été transférées et de ne pas les conserver plus longtemps que nécessaire pour accomplir cet objectif.\n\nNous pouvons également divulguer vos informations personnelles pour les raisons suivantes : (1) pour se conformer aux lois, règlements, ordonnances judiciaires ou autres procédures légales applicables ; (2) pour faire respecter vos accords avec nous, y compris cette Politique de Confidentialité ; ou (3) pour répondre à des réclamations selon lesquelles votre utilisation du Service viole les droits de tiers. Si le Service ou notre société est fusionné ou acquis par une autre entreprise, vos informations seront l'un des actifs transférés au nouveau propriétaire.\n\n## Vos droits\n\nSelon les lois applicables, vous pouvez avoir le droit d'accéder à vos données personnelles, de les rectifier ou de les effacer, de recevoir une copie de vos données personnelles, de restreindre ou de vous opposer au traitement actif de vos données, de nous demander de partager (transférer) vos informations personnelles à une autre entité, de retirer tout consentement que vous nous avez donné pour traiter vos données, un droit de porter plainte auprès d'une autorité statutaire et d'autres droits pertinents en vertu des lois applicables. <!-- Pour exercer ces droits, vous pouvez nous écrire à privacy@gethinode.com. Nous répondrons à votre demande conformément aux lois applicables. -->\n\nNotez que si vous ne nous autorisez pas à collecter ou traiter les informations personnelles requises, ou si vous retirez votre consentement pour traiter celles-ci pour les fins requises, vous pourriez ne pas être en mesure d'accéder ou d'utiliser les services pour lesquels vos informations ont été demandées.\n\n## Cookies, etc.\n\nPour en savoir plus sur la manière dont nous utilisons ces technologies de suivi et vos choix à leur égard, veuillez consulter notre {{< link \"cookies\" >}}Politique/Paramètres des Cookies{{< /link >}}.\n\n## Sécurité\n\nLa sécurité de vos informations est importante pour nous et nous utiliserons des mesures de sécurité raisonnables pour prévenir la perte, l'utilisation abusive ou l'altération non autorisée de vos informations sous notre contrôle. Cependant, compte tenu des risques inhérents, nous ne pouvons garantir une sécurité absolue et par conséquent, nous ne pouvons garantir la sécurité des informations que vous nous transmettez ; vous le faites à vos propres risques.\n\n## Liens vers des tiers et utilisation de vos informations\n\nNotre Service peut contenir des liens vers d'autres sites web qui ne sont pas exploités par nous. Cette Politique de Confidentialité ne couvre pas la politique de confidentialité et les autres pratiques de tout tiers, y compris tout tiers exploitant tout site ou service qui pourrait être accessible via un lien sur le Service. Nous vous conseillons fortement de consulter la politique de confidentialité de chaque site que vous visitez. Nous n'avons aucun contrôle sur le contenu, les politiques de confidentialité ou les pratiques des sites ou services de tiers et déclinons toute responsabilité à cet égard.\n\n<!-- ## Responsable des plaintes / Protection des données\n\nSi vous avez des questions ou des préoccupations concernant le traitement de vos informations dont nous disposons, vous pouvez nous envoyer un e-mail à privacy@gethinode.com. Nous répondrons à vos préoccupations conformément aux lois applicables. -->\n\n*Politique de Confidentialité générée avec {{< link \"https://www.cookieyes.com\" >}}CookieYes{{< /link >}}.*\n"
  },
  {
    "path": "exampleSite/content/nl/_index.md",
    "content": "---\nauthor: Mark Dumay\ntitle: Welkom bij Hinode!\ndescription: Een documentatie en blog thema voor Hugo gebaseerd op Bootstrap 5.\ncontent_blocks:\n  - _bookshop_name: hero\n    heading:\n      title: Welkom bij Hinode!\n      content: |-\n        Een documentatie en blog thema voor Hugo gebaseerd op Bootstrap 5.\n      width: 6\n    background:\n      color: primary\n      subtle: true\n    illustration:\n      image: /img/sunrise.jpg\n      ratio: 16x9\n    width: 8\n    links:\n      - title: \"Over mij\"\n        url: \"/nl/over-mij/\"\n        icon: chevron-right\n    orientation: horizontal\n    justify: center\n\n  - _bookshop_name: articles\n    heading:\n      title: Blog\n      align: start\n    input:\n      section: blog\n      reverse: true\n      sort: date\n    hide_empty: false\n    header_style: none\n    more:\n      title: Meer artikelen\n    padding: 0\n    limit: 3\n    class: border-0 card-zoom card-body-margin\n---\n"
  },
  {
    "path": "exampleSite/content/nl/about.md",
    "content": "---\nslug: over-mij\ntitle: Over mij\ndescription: Een blog en documentatie thema voor Hugo gebaseerd op Bootstrap 5.\ndate: 2023-02-17\nupdated: 2023-08-02\nshowComments: false\n---\n\n\n{{< image src=\"/img/logo_var.svg#logo\" class=\"img-fluid w-50\" wrapper=\"text-center\" >}}\n\n{{< card-group align=\"center\" class=\"border-0\" padding=\"3\" >}}\n    {{< card title=\"Bootstrap raamwerk\" icon=\"fab bootstrap\" >}}\n        Bouw snelle websites geschikt voor mobiele en desktop schermen met Bootstrap 5. Pas de site eenvoudig aan met bronbestanden in Sass.\n    {{< /card >}}\n    {{< card title=\"Volledig doorzoekbaar\" icon=\"fas magnifying-glass\" >}}\n        Doorzoek je site met FlexSearch, een software bibliotheek zonder afhankelijkheden.\n    {{< /card >}}\n    {{< card title=\"Ontwikkelgereedschap\" icon=\"fas code\" >}}\n        Gebruik Node Package Manager om het bouwproces inclusief versiebeheer volledig te automatiseren.\n    {{< /card >}}\n{{< /card-group >}}\n\nOverige functies:\n\n* Omschakelen tussen donkere en lichte modus\n* Ondersteuning voor meerdere talen\n* Herbruikbare Bootstrap componenten via shortcodes en partials\n* Versiebeheer van documentatiepagina's, inclusief secundaire navigatie en selectie van versies\n* Optimalisering van foto's voor meerdere schermafmetingen en resoluties\n* Optimale zoekresultaten, met 100 punten voor SEO volgens [PageSpeed Insights]({{% param \"links.pagespeed\" %}})\n* Veilige communicatie, met een score van A+ volgens [Mozilla Observatory]({{% param \"links.observatory\" %}})\n{.tickmark}\n"
  },
  {
    "path": "exampleSite/content/nl/blog/_index.md",
    "content": "---\nauthor: Mark Dumay\ntitle: Blog\n---\n"
  },
  {
    "path": "exampleSite/content/nl/blog/first-post.md",
    "content": "---\nauthor: Mark Dumay\ntitle: Eerste artikel\nslug: eerste-artikel\ndate: 2022-10-01\ndescription: Dit is mijn eerste artikel.\ntags: [\"blog\"]\nthumbnail:\n  url: img/notepad.jpg\n  author: Frederick Medina\n  authorURL: https://unsplash.com/@frederickjmedina\n  origin: Unsplash\n  originURL: https://unsplash.com/photos/PdfRE-xB--s\n---\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque vulputate, ante in luctus congue, leo risus semper justo, vel consequat sapien lectus quis ipsum. In imperdiet urna justo. Nulla vel pellentesque ipsum. Cras congue feugiat dolor ac aliquam. Pellentesque eget dui venenatis, ultrices urna ac, vehicula nibh. Curabitur est lectus, dapibus eu vehicula non, malesuada et dui. Nam enim nulla, egestas et nunc non, elementum aliquet justo. Mauris euismod mauris sapien, eget vestibulum odio dictum sit amet. Morbi nisl elit, placerat at auctor in, finibus ac neque. Curabitur placerat feugiat risus non vestibulum. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque quis cursus est, nec posuere libero.\n\nIn ac lobortis diam. Curabitur id dui ac nunc mattis rhoncus a sed lorem. Sed lobortis sem turpis, at posuere enim dignissim et. Vivamus fermentum justo quis volutpat volutpat. Proin eget vehicula neque, ut tempus urna. Duis ac ex vel leo pharetra lobortis et vitae lacus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Aliquam erat volutpat. Suspendisse ullamcorper ultrices elementum. Suspendisse mi elit, commodo at varius a, cursus a ligula. Sed et mattis elit, eu luctus arcu. Cras a porttitor libero. Vestibulum tincidunt sed magna at dapibus. Sed quis orci eu lacus aliquam tristique. Integer porttitor ultrices ipsum quis porttitor. Etiam a sodales ligula.\n"
  },
  {
    "path": "exampleSite/content/nl/blog/fourth-post.md",
    "content": "---\nauthor: Mark Dumay\ntitle: Vierde artikel\nslug: vierde-artikel\ndate: 2023-01-01\ndescription: Dit is mijn vierde artikel.\ntags: [\"blog\"]\nthumbnail:\n  url: img/flowers.jpg\n  author: Arvee Marie\n  authorURL: https://unsplash.com/@flutterhappy\n  origin: Unsplash\n  originURL: https://unsplash.com/photos/YnfGtpt2gf4\n---\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam finibus libero in felis accumsan, vitae imperdiet metus vehicula. Quisque nec dignissim purus. In id dui porta sapien posuere viverra nec vel nisi. Sed varius tincidunt lectus, quis sagittis felis interdum id. Proin purus odio, ultrices auctor libero convallis, volutpat gravida turpis. Ut commodo metus orci, quis sagittis lectus rhoncus non. Nulla et lectus tortor. Suspendisse quam felis, molestie non odio quis, consequat venenatis orci. Etiam sed turpis sit amet elit scelerisque imperdiet. Sed suscipit felis non nibh suscipit egestas. Nulla sodales libero non rhoncus consequat. Nunc in elit at est cursus congue ut ac velit. Cras luctus libero augue, id semper sapien volutpat ultrices.\n\nPellentesque sit amet sollicitudin nibh. Cras in dolor eget quam feugiat ultricies in ac lectus. Ut venenatis vitae justo quis pretium. Pellentesque vulputate nulla ac est iaculis vulputate. Proin pellentesque sem nec molestie imperdiet. Duis eu molestie sapien, vel ultricies lacus. Donec in felis tempus, rutrum ipsum at, fermentum felis. Praesent mi odio, semper non vulputate vitae, vulputate quis ex.\n\nNunc rhoncus eleifend gravida. Aliquam feugiat tristique pellentesque. Pellentesque vel elit sed nulla commodo convallis. Curabitur placerat sapien augue, ac semper metus volutpat non. Sed semper ultricies enim, consequat convallis justo placerat eget. Ut fermentum leo facilisis metus congue commodo. Vestibulum consectetur magna vitae ullamcorper sodales. Nulla lobortis aliquam odio id tincidunt. Suspendisse efficitur auctor tortor non consequat. Quisque sit amet posuere lorem, convallis bibendum nisi. Proin ullamcorper justo tempus dignissim scelerisque. Quisque sit amet sapien libero. Phasellus eget enim velit. Proin ut fermentum dui. Proin gravida tortor in ligula lacinia, id dapibus dui tincidunt. Mauris suscipit nisi et urna consectetur, non venenatis nisi euismod.\n"
  },
  {
    "path": "exampleSite/content/nl/blog/second-post.md",
    "content": "---\nauthor: Mark Dumay\ntitle: Tweede artikel\nslug: tweede-artikel\ndate: 2022-11-01\ndescription: Dit is mijn tweede artikel.\ntags: [\"blog\"]\nthumbnail:\n  url: img/phone.jpg\n  author: Thom\n  authorURL: https://unsplash.com/@thomweerd\n  origin: Unsplash\n  originURL: https://unsplash.com/photos/Zdcq3iKly6g\n---\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non sollicitudin sapien. Ut porttitor lectus eu tempor ultricies. Sed semper tincidunt nibh pellentesque condimentum. Vivamus dictum sem eu rhoncus semper. Vestibulum convallis congue tincidunt. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Mauris magna urna, egestas sit amet ligula quis, viverra semper arcu. Praesent laoreet nunc vitae nulla posuere facilisis.\n\nNunc eget dignissim ex, sed lobortis leo. Suspendisse mollis posuere tellus, in viverra nunc ullamcorper vitae. Nam vel tempor arcu, in imperdiet odio. Fusce malesuada vehicula odio, in iaculis nulla congue eget. Quisque id odio id nisl facilisis posuere porta sit amet mauris. Curabitur lorem leo, tempus id rhoncus eget, placerat vitae lectus. Morbi eu aliquet enim. Nulla malesuada laoreet sodales.\n\nNunc volutpat dui in elit euismod, sed egestas purus tristique. Nam in condimentum mauris. Praesent nec suscipit enim. Aliquam dolor ipsum, faucibus vitae purus ac, congue egestas nisi. Donec hendrerit erat eu arcu porttitor rhoncus. Nunc a odio bibendum metus semper pellentesque. Sed at sapien ut est semper eleifend. Aliquam lorem libero, porttitor nec tristique ut, auctor vitae ipsum. Suspendisse pretium pharetra rutrum. Nulla tincidunt tempus enim eu sagittis. Maecenas pulvinar metus a urna mattis dictum sed id tellus.\n"
  },
  {
    "path": "exampleSite/content/nl/blog/third-post.md",
    "content": "---\nauthor: Mark Dumay\ntitle: Derde artikel\nslug: derde-artikel\ndate: 2022-12-01\ndescription: Dit is mijn derde artikel.\ntags: [\"blog\"]\nthumbnail:\n  url: https://picsum.photos/id/184/4288/2848.jpg\n  author: Tim de Groot\n  authorURL: https://unsplash.com/@timdegroot\n  origin: Unsplash\n  originURL: https://unsplash.com/photos/yNGQ830uFB4\n---\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent id scelerisque ligula. Vestibulum eu lorem tortor. Suspendisse tristique ultrices mauris, non maximus lorem faucibus in. Suspendisse sagittis eleifend dapibus. Curabitur dignissim luctus sapien eu consequat. Proin congue dui vel ipsum bibendum varius. Pellentesque cursus nisi metus, egestas eleifend ipsum sollicitudin vitae. Sed vitae erat elementum, semper turpis sed, molestie nulla.\n\nNulla molestie ultrices vehicula. Etiam iaculis, erat a blandit blandit, nulla tellus dapibus ligula, vitae venenatis turpis diam non felis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed vitae arcu in justo iaculis egestas. In imperdiet arcu vitae pharetra commodo. Quisque ut erat eget nisl semper laoreet vitae eget ligula. Mauris bibendum purus nec vulputate faucibus. In luctus sagittis ante, quis laoreet orci bibendum vitae. Nam at odio accumsan, tincidunt eros at, lacinia metus. In et ultricies sapien, a mollis est. Nunc convallis orci eu tristique euismod. Proin vel ullamcorper diam. Quisque et semper orci. Proin pharetra lorem justo, id malesuada erat feugiat sit amet. Praesent bibendum mi at lorem volutpat suscipit. Morbi sed libero elit.\n\nNunc sodales est eu ipsum volutpat, in mollis dui facilisis. Nulla faucibus interdum lectus, a condimentum elit vulputate eu. Nunc ipsum risus, suscipit sit amet nulla ac, pulvinar maximus nulla. In venenatis diam erat, non elementum ante dignissim posuere. Aliquam sem justo, luctus at vestibulum ut, egestas ut quam. Quisque a dolor viverra, aliquam nunc vel, lacinia nulla. In id magna magna. Morbi dapibus pretium sollicitudin. Morbi volutpat augue at felis tristique, quis euismod tellus vulputate. Morbi dui lacus, aliquam eget quam vel, vestibulum faucibus enim. Proin porta pretium metus id venenatis. Aliquam nec tempor lorem. Vivamus euismod est varius sagittis placerat. Maecenas tincidunt elementum libero, at imperdiet elit feugiat vel.\n"
  },
  {
    "path": "exampleSite/content/nl/browserconfig.md",
    "content": "---\ndraft: false\noutputs:\n- xml\nurl: browserconfig.xml\n---\n"
  },
  {
    "path": "exampleSite/content/nl/cookies.md",
    "content": "---\ntitle: Cookiebeleid\ndescription: Cookiebeleid van gethinode.com\ndate: 2024-09-19\nlayout: docs\n---\n<!-- markdownlint-disable MD036 -->\n*Ingangsdatum 19-Sep-2024*\n\n## Wat zijn cookies?\n\nDit cookiebeleid legt uit wat cookies zijn en hoe we ze gebruiken, welke soorten cookies we gebruiken (dat wil zeggen, de informatie die we verzamelen met behulp van cookies en hoe die informatie wordt gebruikt), en hoe je de cookie-instellingen kunt beheren.\n\nCookies zijn kleine tekstbestanden die worden gebruikt om kleine stukjes informatie op te slaan. Ze worden opgeslagen op je apparaat wanneer de website wordt geladen in je browser. Deze cookies helpen ons de website goed te laten functioneren, veiliger te maken, een betere gebruikerservaring te bieden, te begrijpen hoe de website presteert en te analyseren wat werkt en waar verbetering nodig is.\n\n## Hoe gebruiken we cookies?\n\nNet als de meeste online diensten gebruikt onze website *first-party* en *third-party* cookies voor verschillende doeleinden. First-party cookies zijn meestal noodzakelijk voor het correct functioneren van de website en verzamelen geen van je persoonlijk identificeerbare gegevens.\n\nDe third-party cookies die op onze website worden gebruikt, zijn voornamelijk bedoeld om te begrijpen hoe de website presteert, hoe je met onze website omgaat, onze diensten veilig te houden, advertenties te tonen die relevant voor je zijn, en je over het algemeen een betere en verbeterde gebruikerservaring te bieden en je toekomstige interacties met onze website te versnellen.\n\n## Soorten cookies die we gebruiken\n\n{{< cky-audit >}}\n\n## Cookie-voorkeuren beheren\n\n{{< cky-banner >}}\n\nJe kunt je cookie-voorkeuren op elk moment wijzigen door op de bovenstaande knop te klikken. Hiermee kun je de cookie-toestemmingsbanner opnieuw bekijken en je voorkeuren wijzigen of je toestemming direct intrekken.\n\nDaarnaast bieden verschillende browsers verschillende methoden om cookies die door websites worden gebruikt te blokkeren en te verwijderen. Je kunt de instellingen van je browser aanpassen om cookies te blokkeren/verwijderen. Hieronder staan links naar de ondersteuningsdocumenten over hoe je cookies kunt beheren en verwijderen in de belangrijkste webbrowsers.\n\nChrome: https://support.google.com/accounts/answer/32050\n\nSafari: https://support.apple.com/en-in/guide/safari/sfri11471/mac\n\nFirefox: https://support.mozilla.org/en-US/kb/clear-cookies-and-site-data-firefox?redirectslug=delete-cookies-remove-info-websites-stored&redirectlocale=en-US\n\nInternet Explorer: https://support.microsoft.com/en-us/topic/how-to-delete-cookie-files-in-internet-explorer-bca9446f-d873-78de-77ba-d42645fa52fc\n\nAls je een andere webbrowser gebruikt, raadpleeg dan de officiële ondersteuningsdocumenten van je browser.\n\n*Cookiebeleid gegenereerd door {{< link \"https://www.cookieyes.com\" >}}CookieYes - Cookie Policy Generator{{< /link >}}.*\n"
  },
  {
    "path": "exampleSite/content/nl/privacy.md",
    "content": "---\ntitle: Privacybeleid\ndescription: Privacybeleid van gethinode.com\ndate: 2024-09-19\nlayout: docs\n---\n<!-- markdownlint-disable MD036 -->\n*Ingangsdatum 19-Sep-2024*\n\nDit privacybeleid beschrijft het beleid van gethinode.com met betrekking tot het verzamelen, gebruiken en openbaar maken van je informatie die we verzamelen wanneer je onze website gebruikt (https://gethinode.com, hierna te noemen de \"Service\"). Door de Service te openen of te gebruiken, stem je in met het verzamelen, gebruiken en openbaar maken van je informatie in overeenstemming met dit privacybeleid. Als je hiermee niet instemt, verzoeken wij je de Service niet te openen of gebruiken.\n\nWe kunnen dit privacybeleid op elk moment zonder voorafgaande kennisgeving aan jou wijzigen en zullen het herziene privacybeleid op de Service plaatsen. Het herziene beleid wordt effectief 180 dagen nadat het herziene beleid op de Service is geplaatst en je voortgezette toegang tot of gebruik van de Service na die tijd zal je acceptatie van het herziene privacybeleid vormen. We raden je daarom aan deze pagina periodiek te bekijken.\n\n## Hoe we je informatie delen\n\nWe zullen je persoonlijke informatie niet aan derden overdragen zonder jouw toestemming te vragen, behalve in beperkte omstandigheden zoals hieronder beschreven:\n\n- Analytics\n\nWe vereisen dat dergelijke derden de persoonlijke informatie die we aan hen overdragen alleen gebruiken voor het doel waarvoor deze werd overgedragen en deze niet langer bewaren dan nodig is voor het vervullen van dat doel.\n\nWe kunnen je persoonlijke informatie ook openbaar maken voor het volgende: (1) om te voldoen aan de toepasselijke wetgeving, regelgeving, gerechtelijk bevel of ander juridisch proces; (2) om je overeenkomsten met ons af te dwingen, inclusief dit privacybeleid; of (3) om te reageren op claims dat je gebruik van de Service rechten van derden schendt. Als de Service of ons bedrijf wordt samengevoegd met of overgenomen door een ander bedrijf, zal je informatie een van de activa zijn die aan de nieuwe eigenaar wordt overgedragen.\n\n## Je rechten\n\nAfhankelijk van de toepasselijke wetgeving heb je mogelijk het recht om toegang te krijgen tot en je persoonlijke gegevens te corrigeren of te wissen of een kopie van je persoonlijke gegevens te ontvangen, de actieve verwerking van je gegevens te beperken of er bezwaar tegen te maken, ons te vragen je persoonlijke informatie met een andere entiteit te delen (overdragen), elke toestemming die je ons hebt gegeven om je gegevens te verwerken in te trekken, het recht om een klacht in te dienen bij een wettelijke autoriteit en andere rechten die relevant kunnen zijn onder de toepasselijke wetgeving. <!-- Om deze rechten uit te oefenen, kun je ons schrijven op privacy@gethinode.com. We zullen reageren op je verzoek in overeenstemming met de toepasselijke wetgeving. -->\n\nMerk op dat als je ons niet toestaat de vereiste persoonlijke informatie te verzamelen of verwerken, of de toestemming om hetzelfde te verwerken voor de vereiste doeleinden intrekt, je mogelijk geen toegang hebt tot de services waarvoor je informatie werd gevraagd of deze niet kunt gebruiken.\n\n## Cookies\n\nVoor meer informatie over hoe we deze gebruiken en je keuzes met betrekking tot deze tracking-technologieën, verwijzen we naar ons {{< link \"cookies\" >}}Cookiebeleid/Instellingen{{< /link >}}.\n\n## Beveiliging\n\nDe beveiliging van je informatie is belangrijk voor ons en we zullen redelijke beveiligingsmaatregelen gebruiken om verlies, misbruik of ongeoorloofde wijziging van je informatie onder onze controle te voorkomen. Gezien de inherente risico's kunnen we echter geen absolute beveiliging garanderen en bijgevolg kunnen we de beveiliging van informatie die je naar ons verzendt niet verzekeren of garanderen en doe je dit op eigen risico.\n\n## Links naar derden en gebruik van je informatie\n\nOnze Service kan links bevatten naar andere websites die niet door ons worden beheerd. Dit privacybeleid behandelt niet het privacybeleid en andere praktijken van derden, inclusief derden die websites of services beheren die mogelijk toegankelijk zijn via een link op de Service. We raden je ten zeerste aan het privacybeleid van elke site die je bezoekt te bekijken. We hebben geen controle over en nemen geen verantwoordelijkheid voor de inhoud, het privacybeleid of de praktijken van websites of services van derden.\n\n<!-- ## Klachten / Functionaris voor gegevensbescherming\n\nAls je vragen of zorgen hebt over de verwerking van je informatie die bij ons beschikbaar is, kun je ons een e-mail sturen op privacy@gethinode.com. We zullen je zorgen behandelen in overeenstemming met de toepasselijke wetgeving. -->\n\n*Privacybeleid gegenereerd met {{< link \"https://www.cookieyes.com\" >}}CookieYes{{< /link >}}.*\n"
  },
  {
    "path": "exampleSite/data/server.toml",
    "content": "# toml-docs-start server-config\n[[headers]]\n    for = \"/**\"\n    [headers.values]\n        Strict-Transport-Security = \"max-age=31536000; includeSubDomains; preload\"\n        X-Content-Type-Options = \"nosniff\"\n        X-XSS-Protection = \"1; mode=block\"\n        Referrer-Policy = \"strict-origin\"\n        Permissions-Policy = \"\"\"\\\n            geolocation=(), \\\n            midi=(), \\\n            sync-xhr=(), \\\n            microphone=(), \\\n            camera=(), \\\n            magnetometer=(), \\\n            gyroscope=(), \\\n            fullscreen=(), \\\n            payment=() \\\n            \"\"\"\n        cache-control = \"\"\"\\\n            max-age=0, \\\n            no-cache, \\\n            no-store, \\\n            must-revalidate \\\n            \"\"\"\n        Access-Control-Allow-Origin = \"*\"\n        Content-Security-Policy = \"\"\"\\\n            default-src 'none'; \\\n            script-src 'self'; \\\n            font-src 'self'; \\\n            connect-src 'self'; \\\n            img-src 'self'; \\\n            style-src 'self'; \\\n            base-uri 'self'; \\\n            object-src 'none'; \\\n            form-action 'self'; \\\n            manifest-src 'self'; \\\n            media-src 'self' \\\n            \"\"\"\n# toml-docs-end server-config\n\n# toml-docs-start server-custom-404\n[[redirects]]\n\tfrom = '/fr/*'\n\tto = '/fr/404.html'\n\tstatus = 404\n\n[[redirects]]\n\tfrom = '/nl/*'\n\tto = '/nl/404.html'\n\tstatus = 404\n\n[[redirects]]\n\tfrom = '/en/*'\n\tto = '/en/404.html'\n\tstatus = 404\n\n[[redirects]]  # Default language should be last.\n\tfrom = '/*'\n\tto = '/en/404.html'\n\tstatus = 404\n# toml-docs-end server-custom-404\n"
  },
  {
    "path": "exampleSite/go.mod",
    "content": "module github.com/gethinode/hinode-example\n\ngo 1.19\n\nrequire (\n\tgithub.com/FortAwesome/Font-Awesome v0.0.0-20260210181720-337dd2045d56 // indirect\n\tgithub.com/cloudcannon/bookshop/hugo/v3 v3.18.2 // indirect\n\tgithub.com/gethinode/mod-blocks v1.22.1 // indirect\n\tgithub.com/gethinode/mod-bootstrap-icons v1.4.2 // indirect\n\tgithub.com/gethinode/mod-cookieyes/v2 v2.2.6 // indirect\n\tgithub.com/gethinode/mod-docs v1.13.2 // indirect\n\tgithub.com/gethinode/mod-fontawesome/v5 v5.1.1 // indirect\n\tgithub.com/gethinode/mod-utils/v5 v5.23.1 // indirect\n\tgithub.com/twbs/icons v1.13.1 // indirect\n)\n"
  },
  {
    "path": "exampleSite/go.sum",
    "content": "github.com/FortAwesome/Font-Awesome v0.0.0-20260210181720-337dd2045d56 h1:wZEHFCO5SVesIEn1oBuo3ltK7stDYViJsNT2aGRSXN4=\ngithub.com/FortAwesome/Font-Awesome v0.0.0-20260210181720-337dd2045d56/go.mod h1:IUgezN/MFpCDIlFezw3L8j83oeiIuYoj28Miwr/KUYo=\ngithub.com/cloudcannon/bookshop/hugo/v3 v3.18.2 h1:j3XUvvuCv/7SfGKzd7gzb3WEgs1DurqTRDe7gdMAAvU=\ngithub.com/cloudcannon/bookshop/hugo/v3 v3.18.2/go.mod h1:s7mIonDhtsLcn10ZKuVXyqd6BDHI8vT1WQhZw8rPfY8=\ngithub.com/gethinode/mod-blocks v1.22.1 h1:akTuUmBbC81SvgfVIRXCu/g4UuelEYnlhjYNVmyE2UM=\ngithub.com/gethinode/mod-blocks v1.22.1/go.mod h1:7a0rJUYtWi9HJZ6sf/7aiuZiVnMxh/r8ZuArv0ELlbM=\ngithub.com/gethinode/mod-bootstrap-icons v1.4.2 h1:O26U7aTy7/5EWDrCsXGMFrg8LdgGiryLkJ7bLRe0Kq0=\ngithub.com/gethinode/mod-bootstrap-icons v1.4.2/go.mod h1:+X+FA7oU+QkJm70PPuz5XakjL6DfqaaXSn+AxYeQ4rc=\ngithub.com/gethinode/mod-cookieyes/v2 v2.2.6 h1:/DQm8OYpms0On8wuosQER47TplVu/3z7MZHwbBKXCAg=\ngithub.com/gethinode/mod-cookieyes/v2 v2.2.6/go.mod h1:tULb7D7CoTycGUyL7ryqHJKaX11XuL2SN+XwP7/DI0Y=\ngithub.com/gethinode/mod-docs v1.13.2 h1:er3r4czvEu7hhkuN8KAojbYyjK8AmqhmcpbtMrbLlwU=\ngithub.com/gethinode/mod-docs v1.13.2/go.mod h1:ru1w0fHqFocjDIMV0dm40OwhBw5k4UncCS8iO/1S5kI=\ngithub.com/gethinode/mod-fontawesome/v5 v5.1.1 h1:zYjqzFMj2JdYyvRrigIAs8+LIspQ0XSRmi9f1orQm0Q=\ngithub.com/gethinode/mod-fontawesome/v5 v5.1.1/go.mod h1:DZi1UIZLFO9Og2pkrsyTRad85PoFEEwSwiPd7kk28IA=\ngithub.com/gethinode/mod-utils/v5 v5.23.1 h1:Y6c+039rk8vA2m4t739osgDrXbQe3SHX9mF7K0mZSmI=\ngithub.com/gethinode/mod-utils/v5 v5.23.1/go.mod h1:PwQN4oOjA6k/vet11JueJ9asZMgL0DBa3jyS9tPkBWU=\ngithub.com/twbs/icons v1.13.1 h1:6bmNXvoeIbvjFWjfbjXg5JGbelLD1haIsMaEIzE9UZI=\ngithub.com/twbs/icons v1.13.1/go.mod h1:GnRlymgVWp5iVJCMa0Me5b6tFyGpVc2bSxPMRGIJmyA=\n"
  },
  {
    "path": "exampleSite/hinode.work",
    "content": "go 1.19\n\nuse .\nuse ../"
  },
  {
    "path": "exampleSite/hinode.work.sum",
    "content": "github.com/cloudcannon/bookshop/hugo/v3 v3.17.1 h1:weTVWBamjQHMIp/oYTFsPwRzzhWrZA6JO43QnxI1kxw=\ngithub.com/cloudcannon/bookshop/hugo/v3 v3.17.1/go.mod h1:s7mIonDhtsLcn10ZKuVXyqd6BDHI8vT1WQhZw8rPfY8=\ngithub.com/cloudcannon/bookshop/hugo/v3 v3.18.2 h1:j3XUvvuCv/7SfGKzd7gzb3WEgs1DurqTRDe7gdMAAvU=\ngithub.com/cloudcannon/bookshop/hugo/v3 v3.18.2/go.mod h1:s7mIonDhtsLcn10ZKuVXyqd6BDHI8vT1WQhZw8rPfY8=\ngithub.com/gethinode/hinode/component-library v0.0.0-20260126151252-24679a2c2a61 h1:ZotbWXLzG4pArTCFaVAme9EW7/it0f2AdYBO2omYiCQ=\ngithub.com/gethinode/hinode/component-library v0.0.0-20260126151252-24679a2c2a61/go.mod h1:Y/gFEO2qzmZzvOxa+t5R3mKInVQ0tKHezByPLXiv5sA=\ngithub.com/gethinode/mod-fontawesome/v2 v2.1.2 h1:v1aHhbLLwe/05zRHnx9qGqh6b3toDzcLzuv61rWAoGU=\ngithub.com/gethinode/mod-fontawesome/v2 v2.1.2/go.mod h1:zukv88wXqquEvTJJ9mWWk8Ia+9INnA41wYqusf2RcHA=\ngithub.com/gethinode/mod-fontawesome/v3 v3.1.3 h1:xlwmdgulIV/IMj5I1/fH4tPM1/AU0OYZ4vepQiJbOYA=\ngithub.com/gethinode/mod-fontawesome/v3 v3.1.3/go.mod h1:+E6jSVNv7h6oXw4Wm1XRq8HBEB2WrvxCPkp6u4vY5xo=\ngithub.com/gethinode/mod-utils/v4 v4.12.0 h1:5sSfYIxZCeQbXLoZdS//rl6thwLwtXuvM0ujaWKyPmc=\ngithub.com/gethinode/mod-utils/v4 v4.12.0/go.mod h1:bYmvRdAo4ICy5MpSGafDvO4p5bTDpsDKFCPL3bH0mN4=\n"
  },
  {
    "path": "exampleSite/hugo_stats.json",
    "content": "{\n  \"htmlElements\": {\n    \"tags\": [\n      \"a\",\n      \"abbr\",\n      \"blockquote\",\n      \"body\",\n      \"button\",\n      \"code\",\n      \"div\",\n      \"em\",\n      \"figcaption\",\n      \"figure\",\n      \"footer\",\n      \"form\",\n      \"h1\",\n      \"h2\",\n      \"h3\",\n      \"h4\",\n      \"h5\",\n      \"head\",\n      \"hr\",\n      \"html\",\n      \"i\",\n      \"iframe\",\n      \"img\",\n      \"input\",\n      \"ins\",\n      \"kbd\",\n      \"label\",\n      \"li\",\n      \"link\",\n      \"main\",\n      \"mark\",\n      \"meta\",\n      \"nav\",\n      \"noscript\",\n      \"ol\",\n      \"p\",\n      \"path\",\n      \"pre\",\n      \"script\",\n      \"section\",\n      \"small\",\n      \"span\",\n      \"strong\",\n      \"sub\",\n      \"sup\",\n      \"svg\",\n      \"symbol\",\n      \"table\",\n      \"tbody\",\n      \"td\",\n      \"textarea\",\n      \"th\",\n      \"thead\",\n      \"time\",\n      \"title\",\n      \"tr\",\n      \"ul\",\n      \"use\"\n    ],\n    \"classes\": [\n      \"%!s(<nil>)\",\n      \"about\",\n      \"accordion\",\n      \"accordion-body\",\n      \"accordion-button\",\n      \"accordion-collapse\",\n      \"accordion-faq\",\n      \"accordion-flush\",\n      \"accordion-header\",\n      \"accordion-item\",\n      \"active\",\n      \"alert\",\n      \"alert-danger\",\n      \"alert-dark\",\n      \"alert-dismissible\",\n      \"alert-info\",\n      \"alert-light\",\n      \"alert-link\",\n      \"alert-primary\",\n      \"alert-secondary\",\n      \"alert-success\",\n      \"alert-warning\",\n      \"align-bottom\",\n      \"align-items-center\",\n      \"align-items-end\",\n      \"align-items-start\",\n      \"align-middle\",\n      \"align-self-center\",\n      \"align-self-end\",\n      \"align-self-start\",\n      \"anchor\",\n      \"approach\",\n      \"articles\",\n      \"background-container\",\n      \"background-img-fluid\",\n      \"badge\",\n      \"bg-bg-body-tertiary\",\n      \"bg-black\",\n      \"bg-body\",\n      \"bg-body-tertiary\",\n      \"bg-danger\",\n      \"bg-dark\",\n      \"bg-info\",\n      \"bg-light\",\n      \"bg-opacity-10\",\n      \"bg-primary\",\n      \"bg-primary-subtle\",\n      \"bg-secondary\",\n      \"bg-success\",\n      \"bg-warning\",\n      \"bg-white\",\n      \"bi\",\n      \"bi-1-circle\",\n      \"bi-1-circle-fill\",\n      \"bi-2-circle\",\n      \"bi-2-circle-fill\",\n      \"bi-3-circle\",\n      \"bi-3-circle-fill\",\n      \"bi-arrow-left\",\n      \"bi-arrow-right\",\n      \"bi-box-arrow-up-right\",\n      \"bi-chevron-left\",\n      \"bi-chevron-right\",\n      \"bi-display\",\n      \"bi-download\",\n      \"bi-exclamation\",\n      \"bi-exclamation-triangle\",\n      \"bi-facebook\",\n      \"bi-github\",\n      \"bi-globe\",\n      \"bi-google\",\n      \"bi-grid\",\n      \"bi-heart\",\n      \"bi-house\",\n      \"bi-info-circle\",\n      \"bi-link\",\n      \"bi-link-45deg\",\n      \"bi-linkedin\",\n      \"bi-list-ul\",\n      \"bi-moon-stars\",\n      \"bi-phone\",\n      \"bi-pinterest\",\n      \"bi-quote\",\n      \"bi-rocket\",\n      \"bi-rocket-takeoff\",\n      \"bi-share\",\n      \"bi-sort-down\",\n      \"bi-sun\",\n      \"bi-tablet\",\n      \"bi-three-dots\",\n      \"bi-trash\",\n      \"blockquote-alert\",\n      \"blockquote-alert-heading\",\n      \"blockquote-alert-important\",\n      \"blockquote-alert-note\",\n      \"border\",\n      \"border-0\",\n      \"border-bottom\",\n      \"border-bottom-0\",\n      \"border-none\",\n      \"border-top\",\n      \"bottom-0\",\n      \"bottom-bar\",\n      \"breadcrumb\",\n      \"breadcrumb-item\",\n      \"btn\",\n      \"btn-close\",\n      \"btn-danger\",\n      \"btn-dark\",\n      \"btn-group\",\n      \"btn-info\",\n      \"btn-lg\",\n      \"btn-light\",\n      \"btn-link\",\n      \"btn-outline-danger\",\n      \"btn-outline-dark\",\n      \"btn-outline-info\",\n      \"btn-outline-light\",\n      \"btn-outline-primary\",\n      \"btn-outline-secondary\",\n      \"btn-outline-success\",\n      \"btn-outline-warning\",\n      \"btn-primary\",\n      \"btn-secondary\",\n      \"btn-sm\",\n      \"btn-social\",\n      \"btn-success\",\n      \"btn-testimonial\",\n      \"btn-toggle-group\",\n      \"btn-toggle-nav\",\n      \"btn-tooltip\",\n      \"btn-warning\",\n      \"btn-xs\",\n      \"card\",\n      \"card-body\",\n      \"card-body-link\",\n      \"card-body-margin\",\n      \"card-button\",\n      \"card-emphasize\",\n      \"card-icon\",\n      \"card-icon-primary\",\n      \"card-icon-secondary\",\n      \"card-img-bg\",\n      \"card-img-h100\",\n      \"card-img-top\",\n      \"card-img-wrap\",\n      \"card-link-icon\",\n      \"card-minimal\",\n      \"card-text\",\n      \"card-title\",\n      \"card-zoom\",\n      \"cards\",\n      \"carousel\",\n      \"carousel-caption\",\n      \"carousel-control-next\",\n      \"carousel-control-next-icon\",\n      \"carousel-control-prev\",\n      \"carousel-control-prev-icon\",\n      \"carousel-indicators\",\n      \"carousel-inner\",\n      \"carousel-item\",\n      \"checkbox\",\n      \"chroma\",\n      \"cky-audit-table-element\",\n      \"cky-banner-element\",\n      \"clear-separator\",\n      \"codeblock\",\n      \"col\",\n      \"col-10\",\n      \"col-12\",\n      \"col-2\",\n      \"col-3\",\n      \"col-4\",\n      \"col-6\",\n      \"col-8\",\n      \"col-9\",\n      \"col-auto\",\n      \"col-lg-2\",\n      \"col-lg-6\",\n      \"col-lg-8\",\n      \"col-md-10\",\n      \"col-md-12\",\n      \"col-md-2\",\n      \"col-md-3\",\n      \"col-md-4\",\n      \"col-md-6\",\n      \"col-md-8\",\n      \"col-md-9\",\n      \"col-md-auto\",\n      \"col-sm-12\",\n      \"col-sm-3\",\n      \"col-sm-8\",\n      \"collapse\",\n      \"collapsed\",\n      \"command\",\n      \"contact-form\",\n      \"contact-img\",\n      \"container\",\n      \"container-fluid\",\n      \"container-xxl\",\n      \"controls-bottom\",\n      \"cta\",\n      \"custom\",\n      \"custom-activity\",\n      \"d--block\",\n      \"d--none\",\n      \"d-block\",\n      \"d-flex\",\n      \"d-grid\",\n      \"d-inline\",\n      \"d-inline-flex\",\n      \"d-lg-block\",\n      \"d-md-block\",\n      \"d-md-flex\",\n      \"d-md-none\",\n      \"d-none\",\n      \"d-none-dark\",\n      \"d-none-light\",\n      \"d-none-main-dark\",\n      \"d-none-main-light\",\n      \"d-sm-block\",\n      \"d-sm-none\",\n      \"data-table\",\n      \"disabled\",\n      \"display-1\",\n      \"display-4\",\n      \"docs\",\n      \"docs-controls\",\n      \"docs-panel\",\n      \"dropdown\",\n      \"dropdown-divider-bg\",\n      \"dropdown-item\",\n      \"dropdown-menu\",\n      \"dropdown-menu-end\",\n      \"dropdown-toggle\",\n      \"emphasis\",\n      \"end-0\",\n      \"example-bookshop\",\n      \"fa\",\n      \"fa-1\",\n      \"fa-10x\",\n      \"fa-1x\",\n      \"fa-2\",\n      \"fa-2x\",\n      \"fa-2xl\",\n      \"fa-2xs\",\n      \"fa-3\",\n      \"fa-3x\",\n      \"fa-4\",\n      \"fa-4x\",\n      \"fa-5\",\n      \"fa-5x\",\n      \"fa-6\",\n      \"fa-6x\",\n      \"fa-7x\",\n      \"fa-8x\",\n      \"fa-9x\",\n      \"fa-address-card\",\n      \"fa-arrow-right\",\n      \"fa-arrows-rotate\",\n      \"fa-ban\",\n      \"fa-basketball\",\n      \"fa-beat\",\n      \"fa-beat-fade\",\n      \"fa-bell\",\n      \"fa-bootstrap\",\n      \"fa-bounce\",\n      \"fa-camera\",\n      \"fa-camera-rotate\",\n      \"fa-circle\",\n      \"fa-circle-check\",\n      \"fa-circle-info\",\n      \"fa-code\",\n      \"fa-facebook\",\n      \"fa-fade\",\n      \"fa-flag\",\n      \"fa-flip\",\n      \"fa-flip-both\",\n      \"fa-flip-horizontal\",\n      \"fa-flip-vertical\",\n      \"fa-fluid\",\n      \"fa-fw\",\n      \"fa-github\",\n      \"fa-globe\",\n      \"fa-heart\",\n      \"fa-inverse\",\n      \"fa-lg\",\n      \"fa-li\",\n      \"fa-link\",\n      \"fa-linkedin\",\n      \"fa-magnifying-glass\",\n      \"fa-md\",\n      \"fa-medium\",\n      \"fa-mug-saucer\",\n      \"fa-paper-plane\",\n      \"fa-person-skating\",\n      \"fa-person-skiing\",\n      \"fa-person-skiing-nordic\",\n      \"fa-person-snowboarding\",\n      \"fa-pull-left\",\n      \"fa-pulse\",\n      \"fa-quote-left\",\n      \"fa-rocket\",\n      \"fa-rotate-180\",\n      \"fa-rotate-270\",\n      \"fa-rotate-90\",\n      \"fa-shake\",\n      \"fa-sm\",\n      \"fa-snowplow\",\n      \"fa-spin\",\n      \"fa-spinner\",\n      \"fa-square\",\n      \"fa-square-check\",\n      \"fa-stack\",\n      \"fa-stack-1x\",\n      \"fa-stack-2x\",\n      \"fa-star\",\n      \"fa-terminal\",\n      \"fa-triangle-exclamation\",\n      \"fa-ul\",\n      \"fa-users\",\n      \"fa-whatsapp\",\n      \"fa-wrapper\",\n      \"fa-x-twitter\",\n      \"fa-xl\",\n      \"fa-xs\",\n      \"fab\",\n      \"fade\",\n      \"far\",\n      \"fas\",\n      \"faw\",\n      \"featured\",\n      \"figure-caption\",\n      \"file\",\n      \"file-controls\",\n      \"file-panel\",\n      \"fixed-top\",\n      \"flex-column\",\n      \"flex-fill\",\n      \"flex-grow-1\",\n      \"flex-shrink-0\",\n      \"flex-shrink-1\",\n      \"font-monospace\",\n      \"footer\",\n      \"footnote-backref\",\n      \"footnote-ref\",\n      \"footnotes\",\n      \"form-control\",\n      \"form-floating\",\n      \"fs-2\",\n      \"fs-3\",\n      \"fs-4\",\n      \"fs-5\",\n      \"fs-6\",\n      \"fs-lg-5\",\n      \"fs-md-5\",\n      \"fw-30\",\n      \"fw-bold\",\n      \"fw-normal\",\n      \"fw-semibold\",\n      \"g-0\",\n      \"g-3\",\n      \"g-4\",\n      \"gap-1\",\n      \"gap-2\",\n      \"gap-4\",\n      \"gap-5\",\n      \"gradient\",\n      \"grid\",\n      \"h-100\",\n      \"h1\",\n      \"h2\",\n      \"h3\",\n      \"h4\",\n      \"h5\",\n      \"h6\",\n      \"heading\",\n      \"hero\",\n      \"hero-content\",\n      \"hero-image\",\n      \"hero-image-container\",\n      \"hero-title\",\n      \"hidden\",\n      \"highlight\",\n      \"hstack\",\n      \"img-fluid\",\n      \"img-wrap\",\n      \"initialism\",\n      \"invisible\",\n      \"is-search\",\n      \"justify-content-around\",\n      \"justify-content-between\",\n      \"justify-content-center\",\n      \"justify-content-end\",\n      \"justify-content-evenly\",\n      \"justify-content-start\",\n      \"label\",\n      \"lead\",\n      \"leaflet-map\",\n      \"link-bg-black\",\n      \"link-bg-body\",\n      \"link-bg-body-tertiary\",\n      \"link-bg-danger\",\n      \"link-bg-dark\",\n      \"link-bg-footer\",\n      \"link-bg-info\",\n      \"link-bg-light\",\n      \"link-bg-primary\",\n      \"link-bg-secondary\",\n      \"link-bg-success\",\n      \"link-bg-warning\",\n      \"link-bg-white\",\n      \"link-danger\",\n      \"link-dark\",\n      \"link-info\",\n      \"link-light\",\n      \"link-primary\",\n      \"link-secondary\",\n      \"link-success\",\n      \"link-warning\",\n      \"list\",\n      \"list-unstyled\",\n      \"lntable\",\n      \"lntd\",\n      \"lottie-animation\",\n      \"m-0\",\n      \"m-auto\",\n      \"m-col\",\n      \"m-col-1\",\n      \"m-col-md-3\",\n      \"m-n1\",\n      \"m-row\",\n      \"main\",\n      \"main-nav-toggler\",\n      \"masonry\",\n      \"mb-0\",\n      \"mb-1\",\n      \"mb-2\",\n      \"mb-3\",\n      \"mb-4\",\n      \"mb-5\",\n      \"mb-lg-5\",\n      \"me-3\",\n      \"me-auto\",\n      \"me-md-3\",\n      \"menu\",\n      \"menu-item\",\n      \"menu-link\",\n      \"menu-link-header\",\n      \"mermaid\",\n      \"middle-bar\",\n      \"mode-item\",\n      \"mode-toggle\",\n      \"ms-1\",\n      \"ms-auto\",\n      \"ms-md-3\",\n      \"mt-1\",\n      \"mt-2\",\n      \"mt-3\",\n      \"mt-4\",\n      \"mt-5\",\n      \"mt-auto\",\n      \"mt-md-0\",\n      \"multi-docs-collapse\",\n      \"multi-docs-default\",\n      \"multi-docs-filename\",\n      \"multi-file-collapse-0\",\n      \"multi-file-collapse-1\",\n      \"multi-file-collapse-11\",\n      \"multi-file-collapse-16\",\n      \"multi-file-collapse-18\",\n      \"multi-file-collapse-2\",\n      \"multi-file-collapse-3\",\n      \"multi-file-collapse-4\",\n      \"multi-file-collapse-5\",\n      \"multi-file-collapse-6\",\n      \"multi-file-collapse-7\",\n      \"multi-file-collapse-9\",\n      \"mx-auto\",\n      \"mx-md-2\",\n      \"mx-md-n4\",\n      \"my-4\",\n      \"my-auto\",\n      \"my-md-0\",\n      \"my-md-auto\",\n      \"my-md-n4\",\n      \"nav\",\n      \"nav-callout\",\n      \"nav-fill\",\n      \"nav-item\",\n      \"nav-justified\",\n      \"nav-link\",\n      \"nav-panel\",\n      \"nav-pills\",\n      \"nav-tabs\",\n      \"nav-underline\",\n      \"navbar\",\n      \"navbar-brand\",\n      \"navbar-collapse\",\n      \"navbar-container\",\n      \"navbar-contrast\",\n      \"navbar-expand-md\",\n      \"navbar-expand-sm\",\n      \"navbar-fixed\",\n      \"navbar-fixed-top\",\n      \"navbar-fs-6\",\n      \"navbar-md-fs\",\n      \"navbar-mode-selector\",\n      \"navbar-nav\",\n      \"navbar-nav-scroll\",\n      \"navbar-sm-fs\",\n      \"navbar-title-center\",\n      \"navbar-toggler\",\n      \"next\",\n      \"no-js\",\n      \"offcanvas\",\n      \"offcanvas-body\",\n      \"offcanvas-header\",\n      \"offcanvas-start\",\n      \"offcanvas-title\",\n      \"offset-md-4\",\n      \"offset-sm-2\",\n      \"order-0\",\n      \"order-1\",\n      \"order-first\",\n      \"order-md-0\",\n      \"order-md-1\",\n      \"overlay-spacer\",\n      \"p-0\",\n      \"p-1\",\n      \"p-2\",\n      \"p-3\",\n      \"p-4\",\n      \"p-5\",\n      \"panel-dropdown\",\n      \"panels\",\n      \"pb-3\",\n      \"pb-4\",\n      \"pb-5\",\n      \"pe-0\",\n      \"pe-1\",\n      \"pe-2\",\n      \"pe-3\",\n      \"pe-5\",\n      \"persona\",\n      \"position-absolute\",\n      \"position-fixed\",\n      \"position-relative\",\n      \"post-date\",\n      \"preheading\",\n      \"preview\",\n      \"preview-content\",\n      \"preview-controls\",\n      \"preview-desktop\",\n      \"preview-error\",\n      \"preview-fallback-image\",\n      \"preview-iframe\",\n      \"preview-mobile\",\n      \"preview-tablet\",\n      \"previous\",\n      \"ps-0\",\n      \"ps-1\",\n      \"ps-2\",\n      \"ps-3\",\n      \"pt-1\",\n      \"pt-3\",\n      \"pt-4\",\n      \"pt-md-0\",\n      \"ptw-3\",\n      \"ptw-5\",\n      \"ptw-lg-5\",\n      \"ptw-sm-4\",\n      \"px-0\",\n      \"px-4\",\n      \"px-md-4\",\n      \"px-xxl-0\",\n      \"py-0\",\n      \"py-1\",\n      \"py-2\",\n      \"py-3\",\n      \"py-4\",\n      \"py-md-0\",\n      \"py-md-1\",\n      \"py-md-4\",\n      \"ratio\",\n      \"ratio-16x9\",\n      \"releases\",\n      \"rounded\",\n      \"rounded-2\",\n      \"rounded-5\",\n      \"rounded-bottom\",\n      \"rounded-circle\",\n      \"rounded-pill\",\n      \"rounded-start\",\n      \"rounded-top\",\n      \"row\",\n      \"row-cols-1\",\n      \"row-cols-2\",\n      \"row-cols-5\",\n      \"row-cols-lg-3\",\n      \"row-cols-md-2\",\n      \"row-cols-md-3\",\n      \"row-cols-md-4\",\n      \"row-cols-md-5\",\n      \"row-cols-sm-1\",\n      \"row-cols-sm-2\",\n      \"row-cols-sm-3\",\n      \"search\",\n      \"search-input\",\n      \"search-suggestions\",\n      \"section-cover\",\n      \"section-title\",\n      \"section-xxl\",\n      \"separator\",\n      \"shadow\",\n      \"show\",\n      \"sidebar\",\n      \"sidebar-item\",\n      \"sidebar-item-group\",\n      \"sidebar-overflow\",\n      \"slide\",\n      \"small\",\n      \"spinner-border\",\n      \"spinner-grow\",\n      \"start-0\",\n      \"start-100\",\n      \"start-50\",\n      \"sticky-top\",\n      \"stretched-link\",\n      \"svg-inline--fa\",\n      \"syntax-highlight\",\n      \"tab-content\",\n      \"tab-pane\",\n      \"table\",\n      \"table-border-bottom-wrap\",\n      \"table-filter-controls\",\n      \"table-responsive\",\n      \"table-striped\",\n      \"table-wrap\",\n      \"tabs-dropdown\",\n      \"tag-link\",\n      \"team\",\n      \"testimonial\",\n      \"testimonial-carousel-item\",\n      \"testimonial-grid\",\n      \"testimonial-icon\",\n      \"testimonial-img\",\n      \"testimonial-logo\",\n      \"testimonials\",\n      \"text-bg-black\",\n      \"text-bg-body\",\n      \"text-bg-body-tertiary\",\n      \"text-bg-danger\",\n      \"text-bg-dark\",\n      \"text-bg-info\",\n      \"text-bg-light\",\n      \"text-bg-primary\",\n      \"text-bg-secondary\",\n      \"text-bg-success\",\n      \"text-bg-warning\",\n      \"text-bg-white\",\n      \"text-black\",\n      \"text-body\",\n      \"text-body-secondary\",\n      \"text-break\",\n      \"text-center\",\n      \"text-danger\",\n      \"text-dark\",\n      \"text-decoration-none\",\n      \"text-end\",\n      \"text-info\",\n      \"text-light\",\n      \"text-muted\",\n      \"text-nowrap\",\n      \"text-primary\",\n      \"text-right\",\n      \"text-secondary\",\n      \"text-sm-start\",\n      \"text-start\",\n      \"text-success\",\n      \"text-uppercase\",\n      \"text-warning\",\n      \"text-white\",\n      \"tickmark\",\n      \"timeline\",\n      \"timeline-bg-bg-body-tertiary\",\n      \"timeline-bg-body-tertiary\",\n      \"timeline-connector-end\",\n      \"timeline-connector-start\",\n      \"timeline-container\",\n      \"timeline-description-text-end\",\n      \"timeline-description-text-start\",\n      \"timeline-dot\",\n      \"timeline-info\",\n      \"timeline-panel-end\",\n      \"timeline-panel-start\",\n      \"timeline-primary\",\n      \"timeline-semi-circle-end\",\n      \"timeline-semi-circle-start\",\n      \"timeline-sm\",\n      \"timeline-start\",\n      \"timeline-success\",\n      \"timeline-warning\",\n      \"toast\",\n      \"toast-body\",\n      \"toast-container\",\n      \"toast-header\",\n      \"toc\",\n      \"toc-button\",\n      \"toc-item\",\n      \"toc-level-1\",\n      \"toc-level-2\",\n      \"toc-panel\",\n      \"toc-sidebar\",\n      \"toggler-icon\",\n      \"top-0\",\n      \"top-25\",\n      \"top-50\",\n      \"top-bar\",\n      \"translate-middle\",\n      \"translate-middle-y\",\n      \"video-container\",\n      \"video-embedded\",\n      \"video-message\",\n      \"visually-hidden\",\n      \"vr\",\n      \"w-100\",\n      \"w-50\",\n      \"w-auto\",\n      \"width-100\",\n      \"width-md-auto\",\n      \"width-sm-auto\"\n    ],\n    \"ids\": [\n      \"16x9-ratio\",\n      \"1x1-ratio\",\n      \"21x9-ratio\",\n      \"3x1-ratio\",\n      \"3x2-ratio\",\n      \"4x3-ratio\",\n      \"_modals\",\n      \"abbr\",\n      \"about\",\n      \"absolute-sizing\",\n      \"accordion\",\n      \"accordion-always-open\",\n      \"accordion-always-open-heading-0\",\n      \"accordion-always-open-heading-1\",\n      \"accordion-always-open-heading-2\",\n      \"accordion-always-open-item-0\",\n      \"accordion-always-open-item-1\",\n      \"accordion-always-open-item-2\",\n      \"accordion-flush\",\n      \"accordion-flush-heading-0\",\n      \"accordion-flush-heading-1\",\n      \"accordion-flush-heading-2\",\n      \"accordion-flush-item-0\",\n      \"accordion-flush-item-1\",\n      \"accordion-flush-item-2\",\n      \"adding-custom-icons\",\n      \"alert\",\n      \"alert-of-specific-type\",\n      \"alert-with-icon\",\n      \"alex-smith\",\n      \"align-center-1-0\",\n      \"align-center-1-1\",\n      \"align-center-1-2\",\n      \"align-center-1-btn-0\",\n      \"align-center-1-btn-1\",\n      \"align-center-1-btn-2\",\n      \"align-end-1-0\",\n      \"align-end-1-1\",\n      \"align-end-1-2\",\n      \"align-end-1-btn-0\",\n      \"align-end-1-btn-1\",\n      \"align-end-1-btn-2\",\n      \"alignment\",\n      \"always-open\",\n      \"anchor-link\",\n      \"animating-icons\",\n      \"animation\",\n      \"animation-on-hover\",\n      \"approach\",\n      \"args\",\n      \"arguments\",\n      \"articles\",\n      \"articles-de-blog\",\n      \"aspect-ratio\",\n      \"auto-scaling\",\n      \"background-type\",\n      \"badge\",\n      \"bash\",\n      \"basic-hero\",\n      \"basic-preview\",\n      \"basic-testimonial\",\n      \"betty-white\",\n      \"beveiliging\",\n      \"bi-1-circle\",\n      \"bi-1-circle-fill\",\n      \"bi-2-circle\",\n      \"bi-2-circle-fill\",\n      \"bi-3-circle\",\n      \"bi-3-circle-fill\",\n      \"bi-arrow-left\",\n      \"bi-arrow-right\",\n      \"bi-box-arrow-up-right\",\n      \"bi-chevron-left\",\n      \"bi-chevron-right\",\n      \"bi-display\",\n      \"bi-download\",\n      \"bi-exclamation\",\n      \"bi-exclamation-triangle\",\n      \"bi-facebook\",\n      \"bi-github\",\n      \"bi-globe\",\n      \"bi-google\",\n      \"bi-grid\",\n      \"bi-heart\",\n      \"bi-house\",\n      \"bi-info-circle\",\n      \"bi-link\",\n      \"bi-link-45deg\",\n      \"bi-linkedin\",\n      \"bi-list-ul\",\n      \"bi-moon-stars\",\n      \"bi-phone\",\n      \"bi-pinterest\",\n      \"bi-quote\",\n      \"bi-rocket\",\n      \"bi-rocket-takeoff\",\n      \"bi-share\",\n      \"bi-sort-down\",\n      \"bi-sun\",\n      \"bi-tablet\",\n      \"bi-three-dots\",\n      \"bi-trash\",\n      \"bienvenue-sur-hinode\",\n      \"block-diagram\",\n      \"blocked-url-with-fallback-image\",\n      \"blocked-url-without-fallback-image\",\n      \"blocks\",\n      \"blog\",\n      \"body-docs-collapse\",\n      \"body-docs-default\",\n      \"body-docs-filename\",\n      \"body-file-collapse-0\",\n      \"body-file-collapse-1\",\n      \"body-file-collapse-11\",\n      \"body-file-collapse-16\",\n      \"body-file-collapse-18\",\n      \"body-file-collapse-2\",\n      \"body-file-collapse-3\",\n      \"body-file-collapse-4\",\n      \"body-file-collapse-5\",\n      \"body-file-collapse-6\",\n      \"body-file-collapse-7\",\n      \"body-file-collapse-9\",\n      \"bordered-and-pulled-icons\",\n      \"brand-logo\",\n      \"brand-text\",\n      \"breadcrumb\",\n      \"breadcrumb-for-specific-path\",\n      \"btnTOCShowLess\",\n      \"btnTOCShowMore\",\n      \"button\",\n      \"button-group\",\n      \"buttons\",\n      \"buttons-1-0\",\n      \"buttons-1-1\",\n      \"buttons-1-btn-0\",\n      \"buttons-1-btn-1\",\n      \"buttons-with-a-badge\",\n      \"buttons-with-a-collapsible-panel\",\n      \"buttons-with-a-tooltip\",\n      \"buttons-with-an-icon\",\n      \"c4-diagram\",\n      \"callout\",\n      \"callout-1-0\",\n      \"callout-1-1\",\n      \"callout-1-2\",\n      \"callout-1-btn-0\",\n      \"callout-1-btn-1\",\n      \"callout-1-btn-2\",\n      \"card\",\n      \"card-group\",\n      \"card-type\",\n      \"cards\",\n      \"carousel\",\n      \"carousel-16x9\",\n      \"carousel-1x1\",\n      \"carousel-21x9\",\n      \"carousel-3x1\",\n      \"carousel-3x2\",\n      \"carousel-4x3\",\n      \"carousel-original\",\n      \"carousel-portrait-3x2\",\n      \"category-filter\",\n      \"center-coordinates\",\n      \"charles-green\",\n      \"class-diagram\",\n      \"clear-separator\",\n      \"code-snippet-with-filename-only\",\n      \"collapse\",\n      \"collapse-1\",\n      \"collapsed-code-snippet\",\n      \"collapsed-file-preview\",\n      \"color-mode\",\n      \"colored-alert\",\n      \"colored-badges\",\n      \"colored-buttons\",\n      \"colored-cards\",\n      \"colored-highlight\",\n      \"colored-input\",\n      \"colored-navbar\",\n      \"colored-spinner\",\n      \"colored-testimonial\",\n      \"colored-tooltip\",\n      \"columns\",\n      \"command\",\n      \"comment-nous-partageons-vos-informations\",\n      \"comment-utilisons-nous-les-cookies\",\n      \"components\",\n      \"configuration\",\n      \"contact-cta\",\n      \"contact-form\",\n      \"contact-us\",\n      \"container\",\n      \"container-constraints\",\n      \"controls-below\",\n      \"controls-below-preview\",\n      \"controls-placement\",\n      \"cookie-policy\",\n      \"cookie-voorkeuren-beheren\",\n      \"cookiebeleid\",\n      \"cookies\",\n      \"cookies-etc\",\n      \"cropped-images\",\n      \"csp-configuration\",\n      \"cta\",\n      \"custom-activity\",\n      \"custom-body\",\n      \"custom-footer\",\n      \"custom-header\",\n      \"custom-label\",\n      \"custom-list\",\n      \"custom-message\",\n      \"custom-title\",\n      \"dam-images\",\n      \"data\",\n      \"data-format\",\n      \"data-table\",\n      \"default-animation\",\n      \"default-breadcrumb\",\n      \"default-code-snippet\",\n      \"default-file-preview\",\n      \"default-highlight\",\n      \"default-list\",\n      \"default-message\",\n      \"deprecated-feature\",\n      \"derde-artikel\",\n      \"deuxième-article\",\n      \"development-configuration\",\n      \"device-dimensions\",\n      \"dismissible-alert\",\n      \"docs\",\n      \"dropdown-align-center-1\",\n      \"dropdown-align-end-1\",\n      \"dropdown-callout-1\",\n      \"dropdown-nav-0\",\n      \"dropdown-panel-287b662756e7e04bf8ecd65498a9db2d\",\n      \"dropdown-panel-6445614ebf098ee3ab97d2dd6c01dfd1\",\n      \"dropdown-panel-e4a9ae001d9ef3c9b6a2b77c0e236a46\",\n      \"dropdown-panel-ef29ce86068b969f8e9eeaee7944daf2\",\n      \"dropdown-pills-1\",\n      \"dropdown-tabs-1\",\n      \"dropdown-underline-1\",\n      \"dropdown-vertical-1\",\n      \"eerste-artikel\",\n      \"elements-type\",\n      \"embedded-map\",\n      \"embedded-map-example\",\n      \"embedding-restrictions\",\n      \"entity-relationship-diagram\",\n      \"example\",\n      \"examples\",\n      \"external-link\",\n      \"fa-address-card\",\n      \"fa-paper-plane\",\n      \"fab-bootstrap\",\n      \"fab-facebook\",\n      \"fab-github\",\n      \"fab-linkedin\",\n      \"fab-medium\",\n      \"fab-whatsapp\",\n      \"fab-x-twitter\",\n      \"faq\",\n      \"faq-cad1e3980ae9b7d3e2ec16ea44641135\",\n      \"faq-cad1e3980ae9b7d3e2ec16ea44641135-heading-faq-cad1e3980ae9b7d3e2ec16ea44641135\",\n      \"faq-cad1e3980ae9b7d3e2ec16ea44641135-item-0\",\n      \"faq-cad1e3980ae9b7d3e2ec16ea44641135-item-1\",\n      \"faq-cad1e3980ae9b7d3e2ec16ea44641135-item-2\",\n      \"far-square\",\n      \"fas-1\",\n      \"fas-2\",\n      \"fas-3\",\n      \"fas-4\",\n      \"fas-5\",\n      \"fas-6\",\n      \"fas-arrow-right\",\n      \"fas-arrows-rotate\",\n      \"fas-ban\",\n      \"fas-basketball\",\n      \"fas-bell\",\n      \"fas-camera\",\n      \"fas-camera-rotate\",\n      \"fas-circle\",\n      \"fas-circle-check\",\n      \"fas-circle-info\",\n      \"fas-code\",\n      \"fas-flag\",\n      \"fas-globe\",\n      \"fas-heart\",\n      \"fas-link\",\n      \"fas-magnifying-glass\",\n      \"fas-mug-saucer\",\n      \"fas-person-skating\",\n      \"fas-person-skiing\",\n      \"fas-person-skiing-nordic\",\n      \"fas-person-snowboarding\",\n      \"fas-quote-left\",\n      \"fas-rocket\",\n      \"fas-snowplow\",\n      \"fas-spinner\",\n      \"fas-square\",\n      \"fas-square-check\",\n      \"fas-star\",\n      \"fas-terminal\",\n      \"fas-triangle-exclamation\",\n      \"fas-users\",\n      \"featured\",\n      \"featured-article\",\n      \"featured-download\",\n      \"figures\",\n      \"file\",\n      \"file-preview-with-filename-only\",\n      \"fill-and-justify\",\n      \"filtered-list\",\n      \"first-paragraph\",\n      \"first-post\",\n      \"fixed-width\",\n      \"flowchart\",\n      \"flush\",\n      \"fn:1\",\n      \"fnref:1\",\n      \"footer-docs-collapse\",\n      \"footer-docs-default\",\n      \"footer-docs-filename\",\n      \"footer-file-collapse-0\",\n      \"footer-file-collapse-1\",\n      \"footer-file-collapse-11\",\n      \"footer-file-collapse-16\",\n      \"footer-file-collapse-18\",\n      \"footer-file-collapse-2\",\n      \"footer-file-collapse-3\",\n      \"footer-file-collapse-4\",\n      \"footer-file-collapse-5\",\n      \"footer-file-collapse-6\",\n      \"footer-file-collapse-7\",\n      \"footer-file-collapse-9\",\n      \"fourth-post\",\n      \"frontmatter-configuration\",\n      \"full-width-preview\",\n      \"gantt-diagram\",\n      \"gatin-auto\",\n      \"gatin-default\",\n      \"git-graph\",\n      \"grid-layout\",\n      \"growing-spinner\",\n      \"gérer-les-préférences-des-cookies\",\n      \"heading\",\n      \"heading-badges\",\n      \"heading-type\",\n      \"hero\",\n      \"hero-with-backdrop\",\n      \"hero-with-breadcrumb\",\n      \"hidden-markup\",\n      \"hidden-preview\",\n      \"hoe-gebruiken-we-cookies\",\n      \"hoe-we-je-informatie-delen\",\n      \"horizontal-alignment\",\n      \"horizontal-cards\",\n      \"horizontal-cards-with-an-icon\",\n      \"horizontal-cards-with-an-image\",\n      \"horizontal-layout\",\n      \"horizontal-orientation\",\n      \"how-do-we-use-cookies\",\n      \"how-we-share-your-information\",\n      \"hugo-code-example\",\n      \"hugo-on-wikipedia\",\n      \"hugo-security-configuration\",\n      \"hyperlink-tooltip\",\n      \"icon\",\n      \"identification\",\n      \"illustrated-contact-form\",\n      \"illustrated-hero\",\n      \"illustration-type\",\n      \"image\",\n      \"image-first\",\n      \"image-last\",\n      \"image-placement\",\n      \"image-sizing\",\n      \"inline-content\",\n      \"inline-content-with-a-static-reference\",\n      \"input\",\n      \"input-1\",\n      \"input-2\",\n      \"input-files\",\n      \"input-type\",\n      \"inputEmail\",\n      \"inputMessage\",\n      \"inputName\",\n      \"ins\",\n      \"interested-in-this-topic\",\n      \"items-type\",\n      \"je-rechten\",\n      \"kbd\",\n      \"language-selector\",\n      \"leaflet-map-0\",\n      \"leaflet-map-london\",\n      \"liens-vers-des-tiers-et-utilisation-de-vos-informations\",\n      \"line-separator\",\n      \"link\",\n      \"link-icon\",\n      \"links\",\n      \"links-naar-derden-en-gebruik-van-je-informatie\",\n      \"links-type\",\n      \"list\",\n      \"lists\",\n      \"manage-cookie-preferences\",\n      \"map\",\n      \"mark\",\n      \"masonry-layout\",\n      \"meet-our-team\",\n      \"menu\",\n      \"menu-data\",\n      \"mermaid\",\n      \"messages-type\",\n      \"mindmap\",\n      \"minimal\",\n      \"minimal-cards\",\n      \"modal-search\",\n      \"mode-switcher\",\n      \"more-type\",\n      \"named-link\",\n      \"nav-0-0\",\n      \"nav-0-1\",\n      \"nav-0-2\",\n      \"nav-0-btn-0\",\n      \"nav-0-btn-1\",\n      \"nav-0-btn-2\",\n      \"nav-align-center-1\",\n      \"nav-align-end-1\",\n      \"nav-callout-1\",\n      \"nav-nav-0\",\n      \"nav-panel-287b662756e7e04bf8ecd65498a9db2d\",\n      \"nav-panel-6445614ebf098ee3ab97d2dd6c01dfd1\",\n      \"nav-panel-e4a9ae001d9ef3c9b6a2b77c0e236a46\",\n      \"nav-panel-ef29ce86068b969f8e9eeaee7944daf2\",\n      \"nav-pills-1\",\n      \"nav-tabs-1\",\n      \"nav-underline-1\",\n      \"nav-vertical-1\",\n      \"navbar\",\n      \"navbar-0-collapse\",\n      \"navbar-color-1-collapse\",\n      \"navbar-color-10-collapse\",\n      \"navbar-color-2-collapse\",\n      \"navbar-color-3-collapse\",\n      \"navbar-color-4-collapse\",\n      \"navbar-color-5-collapse\",\n      \"navbar-color-6-collapse\",\n      \"navbar-color-7-collapse\",\n      \"navbar-color-8-collapse\",\n      \"navbar-color-9-collapse\",\n      \"navbar-logo-collapse\",\n      \"navbar-mode\",\n      \"navbar-mode-1\",\n      \"navbar-mode-1-checkbox\",\n      \"navbar-mode-1-collapse\",\n      \"navbar-mode-2-collapse\",\n      \"navbar-mode-checkbox\",\n      \"navbar-search-1-collapse\",\n      \"navbar-title-collapse\",\n      \"navs-and-tabs\",\n      \"nested-paragraph\",\n      \"netlify-contact-form\",\n      \"new-feature\",\n      \"offcanvas-label\",\n      \"offcanvas-sidebar\",\n      \"options-type\",\n      \"original-aspect-ratio\",\n      \"outlined-buttons\",\n      \"over-mij\",\n      \"overview\",\n      \"page-link\",\n      \"panel-132e0f84fcfdb6b1be19c54e60fb79e3-0\",\n      \"panel-132e0f84fcfdb6b1be19c54e60fb79e3-1\",\n      \"panel-132e0f84fcfdb6b1be19c54e60fb79e3-2\",\n      \"panel-132e0f84fcfdb6b1be19c54e60fb79e3-btn-0\",\n      \"panel-132e0f84fcfdb6b1be19c54e60fb79e3-btn-1\",\n      \"panel-132e0f84fcfdb6b1be19c54e60fb79e3-btn-2\",\n      \"panel-287b662756e7e04bf8ecd65498a9db2d-0\",\n      \"panel-287b662756e7e04bf8ecd65498a9db2d-1\",\n      \"panel-287b662756e7e04bf8ecd65498a9db2d-2\",\n      \"panel-287b662756e7e04bf8ecd65498a9db2d-btn-0\",\n      \"panel-287b662756e7e04bf8ecd65498a9db2d-btn-1\",\n      \"panel-287b662756e7e04bf8ecd65498a9db2d-btn-2\",\n      \"panel-6445614ebf098ee3ab97d2dd6c01dfd1-0\",\n      \"panel-6445614ebf098ee3ab97d2dd6c01dfd1-1\",\n      \"panel-6445614ebf098ee3ab97d2dd6c01dfd1-2\",\n      \"panel-6445614ebf098ee3ab97d2dd6c01dfd1-btn-0\",\n      \"panel-6445614ebf098ee3ab97d2dd6c01dfd1-btn-1\",\n      \"panel-6445614ebf098ee3ab97d2dd6c01dfd1-btn-2\",\n      \"panel-e4a9ae001d9ef3c9b6a2b77c0e236a46-0\",\n      \"panel-e4a9ae001d9ef3c9b6a2b77c0e236a46-1\",\n      \"panel-e4a9ae001d9ef3c9b6a2b77c0e236a46-2\",\n      \"panel-e4a9ae001d9ef3c9b6a2b77c0e236a46-btn-0\",\n      \"panel-e4a9ae001d9ef3c9b6a2b77c0e236a46-btn-1\",\n      \"panel-e4a9ae001d9ef3c9b6a2b77c0e236a46-btn-2\",\n      \"panel-ef29ce86068b969f8e9eeaee7944daf2-0\",\n      \"panel-ef29ce86068b969f8e9eeaee7944daf2-1\",\n      \"panel-ef29ce86068b969f8e9eeaee7944daf2-2\",\n      \"panel-ef29ce86068b969f8e9eeaee7944daf2-btn-0\",\n      \"panel-ef29ce86068b969f8e9eeaee7944daf2-btn-1\",\n      \"panel-ef29ce86068b969f8e9eeaee7944daf2-btn-2\",\n      \"panels\",\n      \"persona\",\n      \"pie-chart\",\n      \"pill-badges\",\n      \"pills\",\n      \"pills-1-0\",\n      \"pills-1-1\",\n      \"pills-1-2\",\n      \"pills-1-btn-0\",\n      \"pills-1-btn-1\",\n      \"pills-1-btn-2\",\n      \"placement\",\n      \"placement-1-0\",\n      \"placement-1-1\",\n      \"placement-1-btn-0\",\n      \"placement-1-btn-1\",\n      \"politique-de-confidentialité\",\n      \"politique-de-cookies\",\n      \"powershell\",\n      \"premier-article\",\n      \"preview\",\n      \"preview-1\",\n      \"preview-13b4b99119d494201f837b5ac3c6b385-desktop\",\n      \"preview-13b4b99119d494201f837b5ac3c6b385-desktop-tab\",\n      \"preview-13b4b99119d494201f837b5ac3c6b385-mobile\",\n      \"preview-13b4b99119d494201f837b5ac3c6b385-mobile-tab\",\n      \"preview-13b4b99119d494201f837b5ac3c6b385-tablet\",\n      \"preview-13b4b99119d494201f837b5ac3c6b385-tablet-tab\",\n      \"preview-2\",\n      \"preview-22f4bc2b33641e87c3f53d6b57a79e86-desktop\",\n      \"preview-22f4bc2b33641e87c3f53d6b57a79e86-desktop-tab\",\n      \"preview-22f4bc2b33641e87c3f53d6b57a79e86-mobile\",\n      \"preview-22f4bc2b33641e87c3f53d6b57a79e86-mobile-tab\",\n      \"preview-22f4bc2b33641e87c3f53d6b57a79e86-tablet\",\n      \"preview-22f4bc2b33641e87c3f53d6b57a79e86-tablet-tab\",\n      \"preview-6bb19ea5d8f4b1fada9b8ac8fcd8dd3a-desktop\",\n      \"preview-6bb19ea5d8f4b1fada9b8ac8fcd8dd3a-mobile\",\n      \"preview-6bb19ea5d8f4b1fada9b8ac8fcd8dd3a-tablet\",\n      \"preview-71e4451ddd1c99716f793e9a0e6d8e19-desktop\",\n      \"preview-71e4451ddd1c99716f793e9a0e6d8e19-desktop-tab\",\n      \"preview-71e4451ddd1c99716f793e9a0e6d8e19-mobile\",\n      \"preview-71e4451ddd1c99716f793e9a0e6d8e19-mobile-tab\",\n      \"preview-71e4451ddd1c99716f793e9a0e6d8e19-tablet\",\n      \"preview-71e4451ddd1c99716f793e9a0e6d8e19-tablet-tab\",\n      \"preview-b5ed6356275e706bde966f98cf651ca4-desktop\",\n      \"preview-b5ed6356275e706bde966f98cf651ca4-mobile\",\n      \"preview-b5ed6356275e706bde966f98cf651ca4-tablet\",\n      \"preview-bd0a07434bff0665af9996dd34179aeb-desktop\",\n      \"preview-bd0a07434bff0665af9996dd34179aeb-desktop-tab\",\n      \"preview-bd0a07434bff0665af9996dd34179aeb-mobile\",\n      \"preview-bd0a07434bff0665af9996dd34179aeb-mobile-tab\",\n      \"preview-bd0a07434bff0665af9996dd34179aeb-tablet\",\n      \"preview-bd0a07434bff0665af9996dd34179aeb-tablet-tab\",\n      \"preview-df94575693630f858db2a0a755e9003c-desktop\",\n      \"preview-df94575693630f858db2a0a755e9003c-desktop-tab\",\n      \"preview-df94575693630f858db2a0a755e9003c-mobile\",\n      \"preview-df94575693630f858db2a0a755e9003c-mobile-tab\",\n      \"preview-df94575693630f858db2a0a755e9003c-tablet\",\n      \"preview-df94575693630f858db2a0a755e9003c-tablet-tab\",\n      \"preview-f65e0185ff8cd5608ee791208ecff6de-desktop\",\n      \"preview-f65e0185ff8cd5608ee791208ecff6de-desktop-tab\",\n      \"preview-f65e0185ff8cd5608ee791208ecff6de-mobile\",\n      \"preview-f65e0185ff8cd5608ee791208ecff6de-mobile-tab\",\n      \"preview-f65e0185ff8cd5608ee791208ecff6de-tablet\",\n      \"preview-f65e0185ff8cd5608ee791208ecff6de-tablet-tab\",\n      \"preview-unavailable\",\n      \"preview-unavailable-alert-only\",\n      \"preview-with-specific-device\",\n      \"privacy-policy\",\n      \"privacybeleid\",\n      \"production-configuration\",\n      \"quadrant-chart\",\n      \"quatrième-article-exclu-de-la-recherche\",\n      \"que-sont-les-cookies\",\n      \"recent-articles\",\n      \"referenced-content\",\n      \"regular-input\",\n      \"regular-spinner\",\n      \"regular-tooltip\",\n      \"relative-sizing\",\n      \"release\",\n      \"releases\",\n      \"requirement-chart\",\n      \"responsive-sizing\",\n      \"responsive-table\",\n      \"responsive-visibility\",\n      \"rich-cards\",\n      \"rotating-icons\",\n      \"search-input\",\n      \"second-paragraph\",\n      \"second-post\",\n      \"section-heading\",\n      \"security\",\n      \"separator\",\n      \"sequence-diagram\",\n      \"short-feature\",\n      \"sidebar-collapse-0-1\",\n      \"sidebar-collapse-1-1\",\n      \"sized-buttons\",\n      \"sized-feature-button\",\n      \"soorten-cookies-die-we-gebruiken\",\n      \"specifying-an-icon-family\",\n      \"spinner\",\n      \"sql\",\n      \"stacked-cards\",\n      \"stacked-cards-with-an-icon\",\n      \"stacked-cards-with-an-image\",\n      \"stacked-layout\",\n      \"stacking-icons\",\n      \"start-layout\",\n      \"state-diagram\",\n      \"stateful-buttons\",\n      \"static-assets\",\n      \"strict-aspect-ratio\",\n      \"styled-link\",\n      \"styles-type\",\n      \"styling\",\n      \"sub\",\n      \"sup\",\n      \"syntax-highlighting\",\n      \"sécurité\",\n      \"tab-list\",\n      \"table\",\n      \"tablet-preview\",\n      \"tabs\",\n      \"tabs-1-0\",\n      \"tabs-1-1\",\n      \"tabs-1-2\",\n      \"tabs-1-btn-0\",\n      \"tabs-1-btn-1\",\n      \"tabs-1-btn-2\",\n      \"team\",\n      \"testimonial\",\n      \"testimonial-carousel-d1581a43ce3e52de56e081ad0572ac02\",\n      \"testimonial-with-avatar\",\n      \"testimonial-with-case-study\",\n      \"testimonial-with-icon\",\n      \"testimonial-with-logo\",\n      \"testimonials\",\n      \"testimonials-type\",\n      \"third-party-links-use-of-your-information\",\n      \"third-post\",\n      \"timeline\",\n      \"title\",\n      \"toast\",\n      \"toast-container\",\n      \"toast-copied-code-message\",\n      \"toast-example-1\",\n      \"toast-example-2\",\n      \"toast-message-email-4\",\n      \"toc-collapse\",\n      \"toc-collapse-items\",\n      \"tooltip\",\n      \"troisième-article\",\n      \"tweede-artikel\",\n      \"types-de-cookies-que-nous-utilisons\",\n      \"types-of-cookies-we-use\",\n      \"underline\",\n      \"underline-1-0\",\n      \"underline-1-1\",\n      \"underline-1-2\",\n      \"underline-1-btn-0\",\n      \"underline-1-btn-1\",\n      \"underline-1-btn-2\",\n      \"user-journey\",\n      \"vector-images\",\n      \"vertical\",\n      \"vertical-1-0\",\n      \"vertical-1-1\",\n      \"vertical-1-2\",\n      \"vertical-1-btn-0\",\n      \"vertical-1-btn-1\",\n      \"vertical-1-btn-2\",\n      \"video\",\n      \"video-message\",\n      \"video-type\",\n      \"vierde-artikel\",\n      \"vimeo\",\n      \"vos-droits\",\n      \"wat-zijn-cookies\",\n      \"welcome-to-hinode\",\n      \"welkom-bij-hinode\",\n      \"what-are-cookies\",\n      \"xy-chart\",\n      \"your-rights\",\n      \"youtube\",\n      \"zoom-level\",\n      \"à-propos\"\n    ]\n  }\n}\n"
  },
  {
    "path": "exampleSite/layouts/_partials/footer/footer.html",
    "content": "<footer class=\"container-fluid footer text-center p-3\">\n    <div class=\"container-xxl text-center\">\n        <small>\n            {{- $copyright := printf \"%s © %s %s %s.\" (T \"copyright\") (dateFormat \"2006\" now) .Site.Title (T \"rights\") }}\n            {{ cond (gt (len .Site.Copyright) 0) .Site.Copyright $copyright }}\n            {{ .Site.Params.footer.license | safeHTML }} |\n            {{ partial \"assets/link.html\" (dict \"href\" \"/en/privacy\" \"text\" (T \"privacy\") \"class\" \"link-bg-footer\" \"page\" .Page) }} |\n            {{ partial \"assets/link.html\" (dict \"href\" \"/en/cookies\" \"text\" (T \"cookies\") \"class\" \"link-bg-footer\" \"page\" .Page) }} |\n            {{ if .Site.Params.main.endorse }}\n                {{ $link := partial \"assets/link.html\" (dict \"href\" (index site.Params.links \"hinode\") \"text\" \"Hinode\" \"class\" \"link-bg-footer\" \"page\" .Page) }}\n                {{ T \"poweredBy\" $link | safeHTML }}\n            {{ end }}\n        </small>\n    </div>\n</footer>"
  },
  {
    "path": "exampleSite/layouts/_partials/templates/script.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n<!-- TODO: this partial is not properly mounted for the exampleSite, possibly a bug with Hugo -->\n\n{{/* Initialize arguments */}}\n{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"script\" \"args\" .) -}}\n{{- if or $args.err $args.warnmsg -}}\n    {{- partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\" \"templates/script.html\" \n        \"warnid\"  \"warn-invalid-arguments\"\n        \"msg\"     \"Invalid arguments\"\n        \"details\" ($args.errmsg | append $args.warnmsg)\n        \"file\"    page.File\n    ) -}}\n{{- end -}}\n\n{{/* Initialize local arguments */}}\n{{- $category := cond (ne $args.category \"other\") $args.category \"\" -}}\n\n{{/* Main code */}}\n{{- if not $args.err -}}\n    <script src=\"{{ $args.link }}\"\n        {{- with $args.scriptType }}{{ printf ` type=\"%s\"` . | safeHTMLAttr }}{{ end -}}\n        {{- with $category }} data-category=\"{{ . }}\"{{ end -}}\n        {{- with $args.integrity }} integrity=\"{{ . }}\" crossorigin=\"anonymous\"{{ end }}\n        {{- with $args.state }} {{ . | safeHTMLAttr }}{{ end -}}></script>\n{{- end -}}"
  },
  {
    "path": "go.mod",
    "content": "module github.com/gethinode/hinode/v2\n\ngo 1.19\n\nrequire (\n\tgithub.com/FortAwesome/Font-Awesome v0.0.0-20260210181720-337dd2045d56 // indirect\n\tgithub.com/airbnb/lottie-web v5.13.0+incompatible // indirect\n\tgithub.com/gethinode/mod-bootstrap v1.3.6 // indirect\n\tgithub.com/gethinode/mod-csp v1.0.9 // indirect\n\tgithub.com/gethinode/mod-flexsearch/v4 v4.1.0 // indirect\n\tgithub.com/gethinode/mod-fontawesome/v5 v5.1.1 // indirect\n\tgithub.com/gethinode/mod-google-analytics/v2 v2.0.1 // indirect\n\tgithub.com/gethinode/mod-katex v1.1.4 // indirect\n\tgithub.com/gethinode/mod-leaflet/v2 v2.1.0 // indirect\n\tgithub.com/gethinode/mod-lottie/v2 v2.1.0 // indirect\n\tgithub.com/gethinode/mod-mermaid/v4 v4.4.1 // indirect\n\tgithub.com/gethinode/mod-simple-datatables/v3 v3.1.0 // indirect\n\tgithub.com/gethinode/mod-utils/v5 v5.23.1 // indirect\n\tgithub.com/nextapps-de/flexsearch v0.0.0-20250907103239-defb38b083f0 // indirect\n\tgithub.com/twbs/bootstrap v5.3.8+incompatible // indirect\n)\n"
  },
  {
    "path": "go.sum",
    "content": "github.com/FortAwesome/Font-Awesome v0.0.0-20260210181720-337dd2045d56 h1:wZEHFCO5SVesIEn1oBuo3ltK7stDYViJsNT2aGRSXN4=\ngithub.com/FortAwesome/Font-Awesome v0.0.0-20260210181720-337dd2045d56/go.mod h1:IUgezN/MFpCDIlFezw3L8j83oeiIuYoj28Miwr/KUYo=\ngithub.com/airbnb/lottie-web v5.13.0+incompatible h1:plBV5Uq/F1kK0EC61Hr0cBGReI9OgUfd/pp0baoDX8o=\ngithub.com/airbnb/lottie-web v5.13.0+incompatible/go.mod h1:nTss557UK9FGnp8QYlCMO29tjUHwbdAHG/DprbGfHGE=\ngithub.com/gethinode/mod-bootstrap v1.3.5 h1:bewgYpQex+dBABK0u5PUvW6IoUXLHhi1Yv9hcPzwGVc=\ngithub.com/gethinode/mod-bootstrap v1.3.5/go.mod h1:CxrYCFzKtBMz3YWG5i/d5jHKCgvUo60NFcCmz2mxCjQ=\ngithub.com/gethinode/mod-bootstrap v1.3.6 h1:TMNifG5iV6PrrvHPfcIu1Urfdisae/bXmaY1RPhfIIU=\ngithub.com/gethinode/mod-bootstrap v1.3.6/go.mod h1:CxrYCFzKtBMz3YWG5i/d5jHKCgvUo60NFcCmz2mxCjQ=\ngithub.com/gethinode/mod-csp v1.0.9 h1:Bt4agpC/Wy56Gabt8Ox2LbNoj2yrSYXCzY2o69D3dPA=\ngithub.com/gethinode/mod-csp v1.0.9/go.mod h1:Nb22QMicoUHgZQUKP5TCgVrSI8K3KU7jLuLBShmotjg=\ngithub.com/gethinode/mod-flexsearch/v3 v3.2.0 h1:BNpwXheG1XYa7DZQnUX4ZEzL5gCd0HJthS2XNPfxNjo=\ngithub.com/gethinode/mod-flexsearch/v3 v3.2.0/go.mod h1:iYvaBF6Y62pjnCepYAqLxoX1ZdEBoD+9caj4cBC+MxY=\ngithub.com/gethinode/mod-flexsearch/v3 v3.2.1 h1:YzAOmTTYBlP6TKZhYOzDOXk8I7/ZQdprPna+2rD4QFo=\ngithub.com/gethinode/mod-flexsearch/v3 v3.2.1/go.mod h1:iYvaBF6Y62pjnCepYAqLxoX1ZdEBoD+9caj4cBC+MxY=\ngithub.com/gethinode/mod-flexsearch/v3 v3.3.0 h1:MQxonYlf1uwGUI7J17noRVYPvnC1kuDHAvgNBPaPsns=\ngithub.com/gethinode/mod-flexsearch/v3 v3.3.0/go.mod h1:iYvaBF6Y62pjnCepYAqLxoX1ZdEBoD+9caj4cBC+MxY=\ngithub.com/gethinode/mod-flexsearch/v3 v3.3.1 h1:2SRiWBjSs78Rw9ReMtJxynINXwiO+BEGK8SgbOjD3TM=\ngithub.com/gethinode/mod-flexsearch/v3 v3.3.1/go.mod h1:iYvaBF6Y62pjnCepYAqLxoX1ZdEBoD+9caj4cBC+MxY=\ngithub.com/gethinode/mod-flexsearch/v3 v3.3.2 h1:QsDk4NWf5kyS547L7sR7+2VHv/7rtSLlqRZeRGmRbo4=\ngithub.com/gethinode/mod-flexsearch/v3 v3.3.2/go.mod h1:gDtNAClXoaLaK4L+GxL9qCRniZ/Be/io/Gyod6P8l7k=\ngithub.com/gethinode/mod-flexsearch/v4 v4.0.0 h1:gBDXTaV+N0tyAUfM4vaQXyzYim9DpS6ifdmvzUxirf0=\ngithub.com/gethinode/mod-flexsearch/v4 v4.0.0/go.mod h1:GEaf4tD8AOpI/6eZH/aPuG1hrWxwSEiDtDPF0Ow73YI=\ngithub.com/gethinode/mod-flexsearch/v4 v4.0.1 h1:oMPogeGHu67K9ADNm+IdWYr2XNBDVohKpHVLRkvC0Xg=\ngithub.com/gethinode/mod-flexsearch/v4 v4.0.1/go.mod h1:GEaf4tD8AOpI/6eZH/aPuG1hrWxwSEiDtDPF0Ow73YI=\ngithub.com/gethinode/mod-flexsearch/v4 v4.1.0 h1:Xbrf0ybwO91r2gN2hp5RTffycD0qJh+Gx6gmTjTJ0c8=\ngithub.com/gethinode/mod-flexsearch/v4 v4.1.0/go.mod h1:WO5lHVeYkv6ief/TSAxOYfzk0KYaqEUJU8B2/imJWTA=\ngithub.com/gethinode/mod-fontawesome/v4 v4.0.3 h1:ml+V7YPkxsK5sPJz0OlheBlGdEZrry4aH/7M/ytz3zk=\ngithub.com/gethinode/mod-fontawesome/v4 v4.0.3/go.mod h1:EqAF4dW3gyUr/CsNND5lEPJcNRlLJ+GfPIUaGTaVRic=\ngithub.com/gethinode/mod-fontawesome/v4 v4.1.1 h1:nC2tTBHTeUBwVqZCz6kEzDvuBrbMgWeOxcAXbCBwCOs=\ngithub.com/gethinode/mod-fontawesome/v4 v4.1.1/go.mod h1:ydBxVGrcZXn9Vcbm6H5ye9iHez5SQweDYNx7b+Ch3Rc=\ngithub.com/gethinode/mod-fontawesome/v4 v4.3.1 h1:DEJymyTtLrFChdznFYe0snml52UwUSfTCfpmA/yG3fU=\ngithub.com/gethinode/mod-fontawesome/v4 v4.3.1/go.mod h1:ydBxVGrcZXn9Vcbm6H5ye9iHez5SQweDYNx7b+Ch3Rc=\ngithub.com/gethinode/mod-fontawesome/v5 v5.0.2 h1:CwCPLjIcFUD3yYSBr9rfOleNRb4LzLVjefoAFAkVnwc=\ngithub.com/gethinode/mod-fontawesome/v5 v5.0.2/go.mod h1:kWtFDsfhs1Q/tqa5p8bzSlFKN8R0hwHG/IYYBF6AM7E=\ngithub.com/gethinode/mod-fontawesome/v5 v5.0.3 h1:en0PKLkH6POYV+IeRGL1xIX4mdTdHbKPBj/36pJDoTc=\ngithub.com/gethinode/mod-fontawesome/v5 v5.0.3/go.mod h1:kWtFDsfhs1Q/tqa5p8bzSlFKN8R0hwHG/IYYBF6AM7E=\ngithub.com/gethinode/mod-fontawesome/v5 v5.0.4 h1:eaGu7hGQfPReAIHF3RolOhXb+JT8y2fQiKnOIYsNurU=\ngithub.com/gethinode/mod-fontawesome/v5 v5.0.4/go.mod h1:iLRUmdb788apYTXA4LmVyeBkTKPPyiMX41poFQbYiVU=\ngithub.com/gethinode/mod-fontawesome/v5 v5.0.5 h1:XRUZn3pHp7Bzz+Y7IQTRsdJYAhiClygrYOoOBkyBtT4=\ngithub.com/gethinode/mod-fontawesome/v5 v5.0.5/go.mod h1:iLRUmdb788apYTXA4LmVyeBkTKPPyiMX41poFQbYiVU=\ngithub.com/gethinode/mod-fontawesome/v5 v5.0.6 h1:x4R64RkVQbs7AYoOG3dMWo5NXPvSa8K6a0RCk+oC16A=\ngithub.com/gethinode/mod-fontawesome/v5 v5.0.6/go.mod h1:x0tyq3/ylTACO7maMAvbvjIhvShI81Ejpt88+RN7BiQ=\ngithub.com/gethinode/mod-fontawesome/v5 v5.0.7 h1:aJmSBddlg0AtmtKx+YQL8r1G6xwVgSgQ/heAo4a1s7Q=\ngithub.com/gethinode/mod-fontawesome/v5 v5.0.7/go.mod h1:Ez2jywor0jNGHBojEJ1KtJkUiFLjaZixehnwsMsTsrY=\ngithub.com/gethinode/mod-fontawesome/v5 v5.0.8 h1:BAlV+BMlk6FEuLwm8hRn3wT6wH8i6496lB0Rc9ZLC/g=\ngithub.com/gethinode/mod-fontawesome/v5 v5.0.8/go.mod h1:6TtI+LriOd4PmUGsNF0IOnyAwysblLMonCIy3tcvAJ8=\ngithub.com/gethinode/mod-fontawesome/v5 v5.1.0 h1:u3ntQMe1fGntcrljxrbZXA9Q0z2WHlmbPT0sL+Uw1o8=\ngithub.com/gethinode/mod-fontawesome/v5 v5.1.0/go.mod h1:b9nG1pel6LIWiNyb0kZAmyhLo2rrx4dvG2xyoD8tDlk=\ngithub.com/gethinode/mod-fontawesome/v5 v5.1.1 h1:zYjqzFMj2JdYyvRrigIAs8+LIspQ0XSRmi9f1orQm0Q=\ngithub.com/gethinode/mod-fontawesome/v5 v5.1.1/go.mod h1:DZi1UIZLFO9Og2pkrsyTRad85PoFEEwSwiPd7kk28IA=\ngithub.com/gethinode/mod-google-analytics/v2 v2.0.0 h1:Vor4j56qtpjtKY9r5QLeN5CBxuf8YKP3+XvQKEkayrM=\ngithub.com/gethinode/mod-google-analytics/v2 v2.0.0/go.mod h1:y4ZlacA8FSXjmvn9P8cZshOrBB5Wc+3p0DKSehkk+8E=\ngithub.com/gethinode/mod-google-analytics/v2 v2.0.1 h1:WNI8e06Bl1pLYrt1Adwuk4KtU9uVrJmO+KZxggIcI0M=\ngithub.com/gethinode/mod-google-analytics/v2 v2.0.1/go.mod h1:y4ZlacA8FSXjmvn9P8cZshOrBB5Wc+3p0DKSehkk+8E=\ngithub.com/gethinode/mod-katex v1.1.4 h1:HWc45uHKX2JhI624UnA46LCZkLGhSbaq+zAHt9e57zw=\ngithub.com/gethinode/mod-katex v1.1.4/go.mod h1:byAfpI3wuqNJIooTGVEGc1cjBhhCy4+CcK1H6495MYg=\ngithub.com/gethinode/mod-leaflet/v2 v2.0.0 h1:94sQHzzrgB15LuePziHahss/SgJ21a2kDsOx4eE4e7A=\ngithub.com/gethinode/mod-leaflet/v2 v2.0.0/go.mod h1:Z9VrlYTqFRHTI0E/lTG/H7X2nT/JuhoLFaS+jbov7/s=\ngithub.com/gethinode/mod-leaflet/v2 v2.1.0 h1:UNatsksPPPU3jtB1DD0o59o2B2iGfkdgWOWn/g4jT10=\ngithub.com/gethinode/mod-leaflet/v2 v2.1.0/go.mod h1:A9Inp9uwSDD6vW8uYVVGl6eXGMe+j3ESOxV4T53HOaM=\ngithub.com/gethinode/mod-lottie/v2 v2.0.1 h1:jIY5oGHtkXXvJoxNAE2AueoqxqNNlTYHF4+igQmkIAU=\ngithub.com/gethinode/mod-lottie/v2 v2.0.1/go.mod h1:/YzhRcG9H8MyODt8qaOQP0nqoux7EFHW2S7ugiiFf0o=\ngithub.com/gethinode/mod-lottie/v2 v2.1.0 h1:d0ViSsZr8idst7/zWTjCHp93jdX9fPHeGaAHEhi7lO4=\ngithub.com/gethinode/mod-lottie/v2 v2.1.0/go.mod h1:QFnp51I+PvZDeqI8jxETVffIjRmibNYQixkUmZxKivM=\ngithub.com/gethinode/mod-mermaid/v3 v3.0.1 h1:h4v3QvGpSln9PDbWccSktULq9FbRZ57JN4Lp+gVjvVI=\ngithub.com/gethinode/mod-mermaid/v3 v3.0.1/go.mod h1:rbI8IKFfKVGqTY/eJnuNJwzB5kSjaEUNX0NRHc4rBfA=\ngithub.com/gethinode/mod-mermaid/v4 v4.3.0 h1:R3J0wvWaEw6WSdhBRIUjdQj3FMBGrchOmH7MPbcr1tM=\ngithub.com/gethinode/mod-mermaid/v4 v4.3.0/go.mod h1:E4+/ERo1hjEsbCOXbc7FiLmADll36i0rVkAdZ4KHsQ0=\ngithub.com/gethinode/mod-mermaid/v4 v4.4.1 h1:1lG8bHEnYAjV36U+lruGrq5Tm8iBp1b9C9WVVJjWUsQ=\ngithub.com/gethinode/mod-mermaid/v4 v4.4.1/go.mod h1:9PPC7V2FUh4lEe1gWfD0OUMkNpfWPYXyXwinNot1+uM=\ngithub.com/gethinode/mod-simple-datatables/v3 v3.0.0 h1:E2owLogo5oY2jR0N5/7zLB+ZXGEOGtbCAUry1FNRV88=\ngithub.com/gethinode/mod-simple-datatables/v3 v3.0.0/go.mod h1:s/RUJ5mltgAiSPyg8odNLEU5TR0YzkfwwcOpRP0+3Bc=\ngithub.com/gethinode/mod-simple-datatables/v3 v3.1.0 h1:Or6tEL6X4uzFrc6QaoJtH8ox2KubQyS9nvnoL6vgIKY=\ngithub.com/gethinode/mod-simple-datatables/v3 v3.1.0/go.mod h1:+qFQEqTkD1VT9OeL7SlPp/HG5lNHl8detSf+kzuW5IM=\ngithub.com/gethinode/mod-utils/v5 v5.8.0 h1:HVvFX9iyV3NR3j9uQ6+F96rXr+TsKjMqzwY06XYwZE8=\ngithub.com/gethinode/mod-utils/v5 v5.8.0/go.mod h1:PwQN4oOjA6k/vet11JueJ9asZMgL0DBa3jyS9tPkBWU=\ngithub.com/gethinode/mod-utils/v5 v5.9.0 h1:mceeUGOqlmybuH/Z/9UT5QEjcgWJ4SAYl5vVmM1l/0Q=\ngithub.com/gethinode/mod-utils/v5 v5.9.0/go.mod h1:PwQN4oOjA6k/vet11JueJ9asZMgL0DBa3jyS9tPkBWU=\ngithub.com/gethinode/mod-utils/v5 v5.10.0 h1:NlofAfa1YILV9pwS8vMkEwVUdrnKCoIlVwJPm3+UVGs=\ngithub.com/gethinode/mod-utils/v5 v5.10.0/go.mod h1:PwQN4oOjA6k/vet11JueJ9asZMgL0DBa3jyS9tPkBWU=\ngithub.com/gethinode/mod-utils/v5 v5.11.0 h1:1BO9uK0zecHF6dNJcqX8NFNHSIdizlyj88n9ylLUsDc=\ngithub.com/gethinode/mod-utils/v5 v5.11.0/go.mod h1:PwQN4oOjA6k/vet11JueJ9asZMgL0DBa3jyS9tPkBWU=\ngithub.com/gethinode/mod-utils/v5 v5.11.1 h1:LfVXEh3dYwIFNyL4i3R9YinfN1yf1PQTivKQ2sUsCQY=\ngithub.com/gethinode/mod-utils/v5 v5.11.1/go.mod h1:PwQN4oOjA6k/vet11JueJ9asZMgL0DBa3jyS9tPkBWU=\ngithub.com/gethinode/mod-utils/v5 v5.12.0 h1:XH6/MsvgPfYVD8Ci3t20vRH3Zz1JpaqqG6X0/j3mRSE=\ngithub.com/gethinode/mod-utils/v5 v5.12.0/go.mod h1:PwQN4oOjA6k/vet11JueJ9asZMgL0DBa3jyS9tPkBWU=\ngithub.com/gethinode/mod-utils/v5 v5.13.0 h1:ztkE1REey94x36UdlZ7yeitpIQid/BcZQh+wtxBTSQ8=\ngithub.com/gethinode/mod-utils/v5 v5.13.0/go.mod h1:PwQN4oOjA6k/vet11JueJ9asZMgL0DBa3jyS9tPkBWU=\ngithub.com/gethinode/mod-utils/v5 v5.14.0 h1:Nntb2ei7yTRsUmGMUHo/fgCfacIk+GD/ZbSW64gu6HM=\ngithub.com/gethinode/mod-utils/v5 v5.14.0/go.mod h1:PwQN4oOjA6k/vet11JueJ9asZMgL0DBa3jyS9tPkBWU=\ngithub.com/gethinode/mod-utils/v5 v5.15.0 h1:8X/QT/O/OQaN6IISVg9C4/mp/DIr2+q+ofM7Ll3pLT8=\ngithub.com/gethinode/mod-utils/v5 v5.15.0/go.mod h1:PwQN4oOjA6k/vet11JueJ9asZMgL0DBa3jyS9tPkBWU=\ngithub.com/gethinode/mod-utils/v5 v5.15.1 h1:DE3zpIdHznpI7xOB8u+++MQHr4mdGE/WdAa7/M0lKC4=\ngithub.com/gethinode/mod-utils/v5 v5.15.1/go.mod h1:PwQN4oOjA6k/vet11JueJ9asZMgL0DBa3jyS9tPkBWU=\ngithub.com/gethinode/mod-utils/v5 v5.16.1 h1:WzE+xFKmOGX5zAhJ/udR0BFMEiGSbFVLBX/s/n58Rmo=\ngithub.com/gethinode/mod-utils/v5 v5.16.1/go.mod h1:PwQN4oOjA6k/vet11JueJ9asZMgL0DBa3jyS9tPkBWU=\ngithub.com/gethinode/mod-utils/v5 v5.17.0 h1:qwOGyfWWmaSTQBaYrhRNYN/ATuTZ7XXOeAjLETxMGR0=\ngithub.com/gethinode/mod-utils/v5 v5.17.0/go.mod h1:PwQN4oOjA6k/vet11JueJ9asZMgL0DBa3jyS9tPkBWU=\ngithub.com/gethinode/mod-utils/v5 v5.18.0 h1:qRdwc7f+heVPJJh+383QgAYFc9i2jKHAr35ozawM9fI=\ngithub.com/gethinode/mod-utils/v5 v5.18.0/go.mod h1:PwQN4oOjA6k/vet11JueJ9asZMgL0DBa3jyS9tPkBWU=\ngithub.com/gethinode/mod-utils/v5 v5.19.0 h1:fX3gTsYoimUNqD/KeBsyBrrJ2DygQ0M7Rc8gL1HT5Tc=\ngithub.com/gethinode/mod-utils/v5 v5.19.0/go.mod h1:PwQN4oOjA6k/vet11JueJ9asZMgL0DBa3jyS9tPkBWU=\ngithub.com/gethinode/mod-utils/v5 v5.19.1 h1:peyYRxjIf8d84mt435veKaiO5nrIBXQ5xrHKHqcJehw=\ngithub.com/gethinode/mod-utils/v5 v5.19.1/go.mod h1:PwQN4oOjA6k/vet11JueJ9asZMgL0DBa3jyS9tPkBWU=\ngithub.com/gethinode/mod-utils/v5 v5.20.0 h1:K+oBv8kJ4pVj4m1HlxgJiC+DYNX4oumqS6Cvcp2C8Ho=\ngithub.com/gethinode/mod-utils/v5 v5.20.0/go.mod h1:PwQN4oOjA6k/vet11JueJ9asZMgL0DBa3jyS9tPkBWU=\ngithub.com/gethinode/mod-utils/v5 v5.21.0 h1:2IIAGCzc9Jiwx2N7Q/2exA4U38gyBv3P7XXc930JO0w=\ngithub.com/gethinode/mod-utils/v5 v5.21.0/go.mod h1:PwQN4oOjA6k/vet11JueJ9asZMgL0DBa3jyS9tPkBWU=\ngithub.com/gethinode/mod-utils/v5 v5.22.0 h1:zVTzU4BQjqWcA4wrpvjrgxyLOHO+jxdLKiIiYMwbMV8=\ngithub.com/gethinode/mod-utils/v5 v5.22.0/go.mod h1:PwQN4oOjA6k/vet11JueJ9asZMgL0DBa3jyS9tPkBWU=\ngithub.com/gethinode/mod-utils/v5 v5.23.0 h1:PW4ceewrDiO7k3zVjtiLeyrKnAR4UEAxaXH6ja8CNSs=\ngithub.com/gethinode/mod-utils/v5 v5.23.0/go.mod h1:PwQN4oOjA6k/vet11JueJ9asZMgL0DBa3jyS9tPkBWU=\ngithub.com/gethinode/mod-utils/v5 v5.23.1 h1:Y6c+039rk8vA2m4t739osgDrXbQe3SHX9mF7K0mZSmI=\ngithub.com/gethinode/mod-utils/v5 v5.23.1/go.mod h1:PwQN4oOjA6k/vet11JueJ9asZMgL0DBa3jyS9tPkBWU=\ngithub.com/nextapps-de/flexsearch v0.0.0-20250907103239-defb38b083f0 h1:55phPhe6fDjfjG0jX4+br3nLORKgjgx8abZUdI0YJRA=\ngithub.com/nextapps-de/flexsearch v0.0.0-20250907103239-defb38b083f0/go.mod h1:5GdMfPAXzbA2gXBqTjC6l27kioSYzHlqDMh0+wyx7sU=\ngithub.com/twbs/bootstrap v5.3.8+incompatible h1:eK1fsXP7R/FWFt+sSNmmvUH9usPocf240nWVw7Dh02o=\ngithub.com/twbs/bootstrap v5.3.8+incompatible/go.mod h1:fZTSrkpSf0/HkL0IIJzvVspTt1r9zuf7XlZau8kpcY0=\n"
  },
  {
    "path": "hugo_stats.json",
    "content": "{\n  \"htmlElements\": {\n    \"tags\": [\n      \"a\",\n      \"body\",\n      \"button\",\n      \"div\",\n      \"footer\",\n      \"form\",\n      \"h1\",\n      \"head\",\n      \"html\",\n      \"img\",\n      \"input\",\n      \"label\",\n      \"li\",\n      \"link\",\n      \"main\",\n      \"meta\",\n      \"nav\",\n      \"noscript\",\n      \"ol\",\n      \"p\",\n      \"path\",\n      \"script\",\n      \"section\",\n      \"small\",\n      \"span\",\n      \"strong\",\n      \"svg\",\n      \"symbol\",\n      \"table\",\n      \"tbody\",\n      \"title\",\n      \"ul\",\n      \"use\"\n    ],\n    \"classes\": [\n      \"active\",\n      \"align-items-center\",\n      \"ball\",\n      \"bg-body\",\n      \"bg-opacity-10\",\n      \"bg-primary\",\n      \"border-0\",\n      \"bottom-0\",\n      \"bottom-bar\",\n      \"breadcrumb\",\n      \"breadcrumb-item\",\n      \"btn-close\",\n      \"card\",\n      \"card-body\",\n      \"checkbox\",\n      \"col\",\n      \"col-12\",\n      \"col-6\",\n      \"col-lg-2\",\n      \"col-lg-8\",\n      \"col-md-3\",\n      \"col-md-6\",\n      \"col-md-8\",\n      \"col-md-9\",\n      \"col-sm-8\",\n      \"collapse\",\n      \"collapsed\",\n      \"container\",\n      \"container-fluid\",\n      \"container-xxl\",\n      \"d-flex\",\n      \"d-inline\",\n      \"d-lg-block\",\n      \"d-md-block\",\n      \"d-md-none\",\n      \"d-none\",\n      \"d-sm-block\",\n      \"d-sm-none\",\n      \"display-1\",\n      \"display-4\",\n      \"emphasis\",\n      \"end-0\",\n      \"fa-10x\",\n      \"fa-2x\",\n      \"fa-angle-left\",\n      \"fa-ellipsis\",\n      \"fa-fw\",\n      \"fa-github\",\n      \"fa-link-slash\",\n      \"fa-linkedin\",\n      \"fa-magnifying-glass\",\n      \"fa-medium\",\n      \"fa-moon\",\n      \"fa-sun\",\n      \"fab\",\n      \"fade\",\n      \"fas\",\n      \"fixed-top\",\n      \"flex-column\",\n      \"flex-fill\",\n      \"footer\",\n      \"form-control\",\n      \"fs-3\",\n      \"fw-30\",\n      \"fw-bold\",\n      \"g-4\",\n      \"h-100\",\n      \"h-50\",\n      \"img-fluid\",\n      \"invisible\",\n      \"is-search\",\n      \"justify-content-end\",\n      \"label\",\n      \"lead\",\n      \"link-bg-footer\",\n      \"link-secondary\",\n      \"m-auto\",\n      \"main\",\n      \"main-nav-toggler\",\n      \"mb-5\",\n      \"me-auto\",\n      \"middle-bar\",\n      \"modal\",\n      \"modal-body\",\n      \"modal-content\",\n      \"modal-dialog\",\n      \"modal-dialog-centered\",\n      \"modal-dialog-scrollable\",\n      \"modal-header\",\n      \"modal-lg\",\n      \"mode-switch\",\n      \"ms-auto\",\n      \"mt-3\",\n      \"mt-5\",\n      \"mx-auto\",\n      \"my-auto\",\n      \"nav-item\",\n      \"nav-link\",\n      \"navbar\",\n      \"navbar-brand\",\n      \"navbar-collapse\",\n      \"navbar-container\",\n      \"navbar-expand-md\",\n      \"navbar-fixed\",\n      \"navbar-fixed-top\",\n      \"navbar-fs-6\",\n      \"navbar-md-fs\",\n      \"navbar-mode-selector\",\n      \"navbar-nav\",\n      \"navbar-nav-scroll\",\n      \"navbar-toggler\",\n      \"no-js\",\n      \"p-0\",\n      \"p-2\",\n      \"p-3\",\n      \"position-fixed\",\n      \"position-relative\",\n      \"pt-1\",\n      \"pt-4\",\n      \"px-0\",\n      \"px-4\",\n      \"px-xxl-0\",\n      \"py-0\",\n      \"py-3\",\n      \"py-4\",\n      \"row\",\n      \"row-cols-1\",\n      \"row-cols-2\",\n      \"row-cols-lg-3\",\n      \"row-cols-md-2\",\n      \"search\",\n      \"search-background\",\n      \"search-input\",\n      \"search-modal\",\n      \"search-suggestions\",\n      \"section-cover\",\n      \"section-title\",\n      \"svg-inline--fa\",\n      \"text-body\",\n      \"text-center\",\n      \"text-decoration-none\",\n      \"text-muted\",\n      \"text-secondary\",\n      \"text-sm-start\",\n      \"text-start\",\n      \"toast\",\n      \"toast-body\",\n      \"toast-container\",\n      \"toast-header\",\n      \"toggler-icon\",\n      \"top-bar\",\n      \"w-100\",\n      \"width-100\",\n      \"width-md-auto\"\n    ],\n    \"ids\": [\n      \"container\",\n      \"fab-github\",\n      \"fab-linkedin\",\n      \"fab-medium\",\n      \"fas-angle-left\",\n      \"fas-ellipsis\",\n      \"fas-link-slash\",\n      \"fas-magnifying-glass\",\n      \"fas-moon\",\n      \"fas-sun\",\n      \"navbar-0-collapse\",\n      \"navbar-mode\",\n      \"navbar-mode-checkbox\",\n      \"search-input-modal\",\n      \"search-modal\",\n      \"toast-container\",\n      \"toast-copied-code-message\",\n      \"welcome-to-hinode\"\n    ]\n  }\n}\n"
  },
  {
    "path": "i18n/de.yaml",
    "content": "# Single pages\n- id: postedOnDate\n  translation: \"Veröffentlicht am {{ . }}\"\n- id: lastModified\n  translation: \"Zuletzt verändert am {{ . }}\"\n- id: read\n  translation: \"Lesezeit\"\n- id: minutesShort\n  translation: \"Min.\"\n- id: words\n  translation: \"Wörter\"\n- id: photoFull\n  translation: \"Foto von %s auf %s\"\n- id: photoShort\n  translation: \"Foto von {{ . }}\"\n- id: photoOn\n  translation: \"auf\"\n- id: draft\n  translation: \"Entwurf\"\n- id: published\n  translation: \"Veröffentlicht\"\n\n# List pages\n- id: article\n  translation: \"Artikel\"\n- id: category\n  translation: \"Kategorie\"\n- id: articles\n  translation: \"Artikel\"\n- id: more\n  translation: \"Weitere {{ . }}\"\n- id: emptyList\n  translation: \"Keine weiteren Artikel gefunden\"\n- id: emptyTags\n  translation: \"Keine Schlagworte gefunden\"\n- id: readMore\n  translation: \"Weiterlesen\"\n\n# Languages\n- id: lang_de\n  translation: \"Deutsch\"\n- id: lang_en\n  translation: \"Englisch\"\n- id: lang_nl\n  translation: \"Niederländisch\"\n- id: lang_fr\n  translation: \"Französisch\"\n\n# Sharing\n- id: shareLink\n  translation: \"Diese Seite teilen per {{ . }}\"\n- id: shareSystem\n  translation: \"System\"\n- id: copyToClipboard\n  translation: \"In die Zwischenablage kopieren\"\n- id: copiedToClipboard\n  translation: \"befindet sich in der Zwischenablage\"\n- id: link\n  translation: \"Link zur Webseite\"\n- id: code\n  translation: \"Code\"\n- id: download\n  translation: \"Artikel herunterladen\"\n\n# Hero\n- id: backgroundImage\n  translation: \"Hintergrundbild\"\n- id: heroImage\n  translation: \"Hero-Bild\"\n\n# Pagination\n- id: paginationNav\n  translation: \"Navigation auf der Seite\"\n- id: paginationPrevious\n  translation: \"Vorherige\"\n- id: paginationNext\n  translation: \"Nächste\"\n- id: paginationFirst\n  translation: \"Erste\"\n- id: paginationLast\n  translation: \"Letzte\"\n\n# Navigation\n- id: colorMode\n  translation: \"Modus umschalten\"\n- id: colorLight\n  translation: \"Light\"\n- id: colorDark\n  translation: \"Dark\"\n- id: colorAuto\n  translation: \"Auto\"\n- id: toggleMainNav\n  translation: \"Hauptmenü anzuzeigen oder auszublenden\"\n- id: home\n  translation: \"Startseite\"\n- id: languageSwitcherLabel\n  translation: \"Sprache\"\n- id: close\n  translation: \"Schließen\"\n\n# Table of contents\n- id: toc\n  translation: \"Auf dieser Seite\"\n- id: seeAlso\n  translation: \"Siehe auch\"\n- id: sectionMenu\n  translation: \"Thema auswählen\"\n- id: tocShowMore\n  translation: \"{{ . }} weitere anzeigen\"\n- id: tocShowLess\n  translation: \"Weniger anzeigen\"\n\n# Sidebar\n- id: toggleSidebar\n  translation: \"Menünavigation anzeigen oder ausblenden\"\n- id: toggleSecondary\n  translation: \"Weitere Elemente anzeigen oder ausblenden\"\n\n# Feature\n- id: addedFeature\n  translation: \"Eingefügt seit {{ . }}\"\n- id: deprecatedFeature\n  translation: \"Veraltet seit {{ . }}\"\n- id: alternativeFeature\n  translation: \"Verwende stattdessen `{{ . }}`\"\n\n# Versioning\n- id: latest\n  translation: \"neueste\"\n- id: allVersions\n  translation: \"Alle Versionen\"\n- id: newerVersionAlert\n  translation: \"Es gibt eine neuere Version von {{ . }}!\"\n\n# 404 page\n- id: pageNotFound\n  translation: \"Diese Seite existiert nicht. Versuche es über die {{ . }}\"\n- id: pageNotFoundTitle\n  translation: \"Nicht gefunden\"\n- id: pageNotFoundHome\n  translation: \"Startseite\"\n\n# Footer\n- id: copyright\n  translation: \"Copyright\"\n- id: rights\n  translation: \"Alle Rechte vorbehalten\"\n- id: poweredBy\n  translation: \"Ermöglicht durch {{ . }}\"\n\n# Comments\n- id: show\n  translation: \"Anzeigen\"\n- id: comments\n  translation: \"Kommentare\" \n\n# Arguments\n- id: name\n  translation: \"Name\"\n- id: type\n  translation: \"Typ\"\n- id: required \n  translation: \"Erforderlich\"\n- id: default\n  translation: \"Standard\"\n- id: comment\n  translation: \"Kommentar\"\n- id: supportedValues\n  translation: \"Unterstützte Werte\"\n\n# Alerts\n- id: caution\n  translation: Vorsicht\n- id: important\n  translation: Wichtig\n- id: note\n  translation: Hinweis\n- id: tip\n  translation: Tipp\n- id: warning\n  translation: Warnung\n\n# Image\n- id: image\n  translation: Bild\n\n# Nav & Tab\n- id: clickToExpand\n  translation: \"Zum Erweitern klicken\"\n\n# Contact information\n- id: contactHeaderTopic\n  translation: \"Interessiert an diesem Thema?\"\n- id: contactBody\n  translation: \"Bitte hinterlassen Sie Ihre Kontaktdaten, damit wir uns mit Ihnen in Verbindung setzen können.\"\n- id: contactAction\n  translation: \"Kontakt aufnehmen\"\n\n# Newsletter\n- id: newsletterHeader\n  translation: \"Bleib auf dem Laufenden\"\n- id: newsletterName\n  translation: \"Name\"\n- id: newsletterEmail\n  translation: \"E-Mail\"\n- id: newsletterSubscribe\n  translation: \"Abonnieren\"\n\n# Testimonial\n- id: testimonialPrevious\n  translation: \"Vorheriges Testimonial\"\n- id: testimonialNext\n  translation: \"Nächstes Testimonial\"\n- id: testimonialCase\n  translation: \"Kundenfallstudie anzeigen\"\n\n# Preview\n- id: previewError\n  translation: \"Vorschau konnte nicht geladen werden für\"\n- id: previewOpenTab\n  translation: \"In neuem Tab öffnen\"\n\n# Contact form fields\n- id: formName\n  translation: \"Name\"\n- id: formCompany\n  translation: \"Unternehmen\"\n- id: formEmail\n  translation: \"E-Mail\"\n- id: formMessage\n  translation: \"Nachricht\"\n- id: formSubmit\n  translation: \"Absenden\"\n- id: formBotField\n  translation: \"Bitte nicht ausfüllen, wenn Sie ein Mensch sind\""
  },
  {
    "path": "i18n/en.yaml",
    "content": "# Single pages\n- id: postedOnDate\n  translation: \"Posted on {{ . }}\"\n- id: lastModified\n  translation: \"Last modified on {{ . }}\"\n- id: read\n  translation: \"read\"\n- id: minutesShort\n  translation: \"min\"\n- id: words\n  translation: \"words\"\n- id: photoFull\n  translation: \"Photo by %s on %s\"\n- id: photoShort\n  translation: \"Photo by {{ . }}\"\n- id: photoOn\n  translation: \"on\"\n- id: draft\n  translation: \"Draft\"\n- id: published\n  translation: \"Published\"\n\n# List pages\n- id: article\n  translation: \"Article\"\n- id: category\n  translation: \"Category\"\n- id: articles\n  translation: \"Articles\"\n- id: more\n  translation: \"More {{ . }}\"\n- id: emptyList\n  translation: \"No articles found\"\n- id: emptyTags\n  translation: \"No tags found\"\n- id: readMore\n  translation: \"Read more\"\n\n# Languages\n- id: lang_de\n  translation: \"German\"\n- id: lang_en\n  translation: \"English\"\n- id: lang_nl\n  translation: \"Dutch\"\n- id: lang_fr\n  translation: \"French\"\n\n# Sharing\n- id: shareLink\n  translation: \"Share via {{ . }}\"\n- id: shareSystem\n  translation: \"system\"\n- id: copyToClipboard\n  translation: \"copy to clipboard\"\n- id: copiedToClipboard\n  translation: \"copied to clipboard\"\n- id: link\n  translation: \"Link\"\n- id: code\n  translation: \"Code\"\n- id: download\n  translation: \"Download article\"\n\n# Hero\n- id: backgroundImage\n  translation: \"Background image\"\n- id: heroImage\n  translation: \"Hero image\"\n\n# Pagination\n- id: paginationNav\n  translation: \"Page navigation\"\n- id: paginationPrevious\n  translation: \"Previous page\"\n- id: paginationNext\n  translation: \"Next page\"\n- id: paginationFirst\n  translation: \"First page\"\n- id: paginationLast\n  translation: \"Last page\"\n\n# Navigation\n- id: colorMode\n  translation: \"Toggle theme\"\n- id: colorLight\n  translation: \"Light\"\n- id: colorDark\n  translation: \"Dark\"\n- id: colorAuto\n  translation: \"Auto\"\n- id: toggleMainNav\n  translation: \"Toggle main navigation\"\n- id: home\n  translation: \"Home\"\n- id: languageSwitcherLabel\n  translation: \"Language\"\n- id: close\n  translation: \"Close\"\n\n# Table of contents\n- id: toc\n  translation: \"On this page\"\n- id: seeAlso\n  translation: \"See also\"\n- id: sectionMenu\n  translation: \"Select a topic\"\n- id: tocShowMore\n  translation: \"Show {{ . }} more\"\n- id: tocShowLess\n  translation: \"Show less\"\n\n# Sidebar\n- id: toggleSidebar\n  translation: \"Toggle sidebar navigation\"\n- id: toggleSecondary\n  translation: \"Toggle more items\"\n\n# Feature\n- id: addedFeature\n  translation: \"Added in {{ . }}\"\n- id: deprecatedFeature\n  translation: \"Deprecated in {{ . }}\"\n- id: alternativeFeature\n  translation: \"Use `{{ . }}` instead\"\n\n# Versioning\n- id: latest\n  translation: \"latest\"\n- id: allVersions\n  translation: \"All versions\"\n- id: newerVersionAlert\n  translation: \"There is a newer version of {{ . }}!\"\n\n# 404 page\n- id: pageNotFound\n  translation: \"The page you are looking for does not exist or another error occurred. Try going back to our {{ . }}.\"\n- id: pageNotFoundTitle\n  translation: \"Page not found\"\n- id: pageNotFoundHome\n  translation: \"home page\"\n\n# Footer\n- id: copyright\n  translation: \"Copyright\"\n- id: rights\n  translation: \"All rights reserved\"\n- id: poweredBy\n  translation: \"Powered by {{ . }}\"\n\n# Comments\n- id: show\n  translation: \"Show\"\n- id: comments\n  translation: \"Comments\" \n\n# Arguments\n- id: name\n  translation: \"Name\"\n- id: type\n  translation: \"Type\"\n- id: required \n  translation: \"Required\"\n- id: default\n  translation: \"Default\"\n- id: comment\n  translation: \"Comment\"\n- id: supportedValues\n  translation: \"Supported values\"\n\n# Alerts\n- id: caution\n  translation: Caution\n- id: important\n  translation: Important\n- id: note\n  translation: Note\n- id: tip\n  translation: Tip\n- id: warning\n  translation: Warning\n\n# Image\n- id: image\n  translation: image\n\n# Nav & Tab\n- id: clickToExpand\n  translation: \"Click to expand\"\n\n# Contact information\n- id: contactHeaderTopic\n  translation: \"Interested in this topic?\"\n- id: contactBody\n  translation: \"Please leave your contact details so we can get in touch.\"\n- id: contactAction\n  translation: \"Get in touch\"\n\n# Newsletter\n- id: newsletterHeader\n  translation: \"Stay informed\"\n- id: newsletterName\n  translation: \"Name\"\n- id: newsletterEmail\n  translation: \"Email\"\n- id: newsletterSubscribe\n  translation: \"Subscribe\"\n\n# Testimonial\n- id: testimonialPrevious\n  translation: \"Previous testimonial\"\n- id: testimonialNext\n  translation: \"Next testimonial\"\n- id: testimonialCase\n  translation: \"View client case\"\n\n# Preview\n- id: previewError\n  translation: \"Unable to load preview for\"\n- id: previewOpenTab\n  translation: \"Open in new tab\"\n\n# Contact form fields\n- id: formName\n  translation: \"Name\"\n- id: formCompany\n  translation: \"Company\"\n- id: formEmail\n  translation: \"Email\"\n- id: formMessage\n  translation: \"Message\"\n- id: formSubmit\n  translation: \"Submit\"\n- id: formBotField\n  translation: \"Don't fill this out if you're human\"  \n"
  },
  {
    "path": "i18n/fr.yaml",
    "content": "# Single pages\n- id: postedOnDate\n  translation: \"Posté le {{ . }}\"\n- id: lastModified\n  translation: \"Dernière modification le {{ . }}\"\n- id: read\n  translation: \"de lecture\"\n- id: minutesShort\n  translation: \"min\"\n- id: words\n  translation: \"mots\"\n- id: photoFull\n  translation: \"Photo par %s sur %s\"\n- id: photoShort\n  translation: \"Photo par {{ . }}\"\n- id: photoOn\n  translation: \"sur\"\n- id: draft\n  translation: \"Brouillon\"\n- id: published\n  translation: \"Publié\"\n\n# List pages\n- id: article\n  translation: \"Article\"\n- id: category\n  translation: \"Catégorie\"\n- id: articles\n  translation: \"Articles\"\n- id: more\n  translation: \"Plus {{ . }}\"\n- id: emptyList\n  translation: \"Aucun articles trouvé\"\n- id: emptyTags\n  translation: \"Aucun tags trouvé\"\n- id: readMore\n  translation: \"Lire plus\"\n\n# Languages\n- id: lang_de\n  translation: \"Allemand\"\n- id: lang_en\n  translation: \"Anglais\"\n- id: lang_nl\n  translation: \"Néerlandais\"\n- id: lang_fr\n  translation: \"Français\"\n\n# Sharing\n- id: shareLink\n  translation: \"Partager via {{ . }}\"\n- id: shareSystem\n  translation: \"système\"\n- id: copyToClipboard\n  translation: \"copier dans le presse-papier\"\n- id: copiedToClipboard\n  translation: \"copié dans le presse-papier\"\n- id: link\n  translation: \"Lien\"\n- id: code\n  translation: \"Code\"\n- id: download\n  translation: \"Télécharger l'article\"\n\n# Hero\n- id: backgroundImage\n  translation: \"Image de fond\"\n- id: heroImage\n  translation: \"Image héro\"\n\n# Pagination\n- id: paginationNav\n  translation: \"Navigation de la page\"\n- id: paginationPrevious\n  translation: \"Page précédente\"\n- id: paginationNext\n  translation: \"Page suivante\"\n- id: paginationFirst\n  translation: \"Première page\"\n- id: paginationLast\n  translation: \"Dernière page\"\n\n# Navigation\n- id: colorMode\n  translation: \"Changer le thème\"\n- id: colorLight\n  translation: \"Clair\"\n- id: colorDark\n  translation: \"Sombre\"\n- id: colorAuto\n  translation: \"Auto\"\n- id: toggleMainNav\n  translation: \"Afficher/Masquer la navigation principale\"\n- id: home\n  translation: \"Accueil\"\n- id: languageSwitcherLabel\n  translation: \"Langage\"\n- id: close\n  translation: \"Fermer\"\n\n# Table of contents\n- id: toc\n  translation: \"Sur cette page\"\n- id: seeAlso\n  translation: \"Voir également\"\n- id: sectionMenu\n  translation: \"Selectionner un topic\"\n- id: tocShowMore\n  translation: \"Afficher {{ . }} plus\"\n- id: tocShowLess\n  translation: \"Afficher moins\"\n\n# Sidebar\n- id: toggleSidebar\n  translation: \"Afficher/Masquer la barre latérale\"\n- id: toggleSecondary\n  translation: \"Afficher/Masquer plus d'éléments\"\n\n# Feature\n- id: addedFeature\n  translation: \"Ajouté dans {{ . }}\"\n- id: deprecatedFeature\n  translation: \"Obsolète dans {{ . }}\"\n- id: alternativeFeature\n  translation: \"Utilisez `{{ . }}` à la place\"\n\n# Versioning\n- id: latest\n  translation: \"dernière\"\n- id: allVersions\n  translation: \"Toutes les versions\"\n- id: newerVersionAlert\n  translation: \"Il existe une nouvelle version de {{ . }}!\"\n\n# 404 page\n- id: pageNotFound\n  translation: \"La page que vous recherchez n'existe pas ou une autre erreur s'est produite. Essayez de revenir à notre {{ . }}.\"\n- id: pageNotFoundTitle\n  translation: \"Page non trouvée\"\n- id: pageNotFoundHome\n  translation: \"page d'accueil\"\n\n# Footer\n- id: copyright\n  translation: \"Copyright\"\n- id: rights\n  translation: \"Tous droits réservés\"\n- id: poweredBy\n  translation: \"Propulsé par {{ . }}\"\n\n# Comments\n- id: show\n  translation: \"Afficher\"\n- id: comments\n  translation: \"Commentaires\"\n\n# Arguments\n- id: name\n  translation: \"Nom\"\n- id: type\n  translation: \"Type\"\n- id: required \n  translation: \"Requis\"\n- id: default\n  translation: \"Défaut\"\n- id: comment\n  translation: \"Commentaire\"\n- id: supportedValues\n  translation: \"Valeurs supportées\"\n\n  # Alerts\n- id: caution\n  translation: Prudence\n- id: important\n  translation: Important\n- id: note\n  translation: Remarque\n- id: tip\n  translation: Astuce\n- id: warning\n  translation: Attention\n\n# Image\n- id: image\n  translation: image\n\n# Nav & Tab\n- id: clickToExpand\n  translation: \"Cliquez pour afficher le contenu\"\n\n# Contact information\n- id: contactHeaderTopic\n  translation: \"Intéressé par ce sujet?\"\n- id: contactBody\n  translation: \"Veuillez laisser vos coordonnées afin que nous puissions vous contacter.\"\n- id: contactAction\n  translation: \"Nous contacter\"\n\n# Newsletter\n- id: newsletterHeader\n  translation: \"Restez informé\"\n- id: newsletterName\n  translation: \"Nom\"\n- id: newsletterEmail\n  translation: \"E-mail\"\n- id: newsletterSubscribe\n  translation: \"S'abonner\"\n\n# Testimonial\n- id: testimonialPrevious\n  translation: \"Témoignage précédent\"\n- id: testimonialNext\n  translation: \"Témoignage suivant\"\n- id: testimonialCase\n  translation: \"Voir l'étude de cas client\"\n\n# Preview\n- id: previewError\n  translation: \"Impossible de charger l'aperçu pour\"\n- id: previewOpenTab\n  translation: \"Ouvrir dans un nouvel onglet\"\n\n# Contact form fields\n- id: formName\n  translation: \"Nom\"\n- id: formCompany\n  translation: \"Société\"\n- id: formEmail\n  translation: \"E-mail\"\n- id: formMessage\n  translation: \"Message\"\n- id: formSubmit\n  translation: \"Envoyer\"\n- id: formBotField\n  translation: \"Ne remplissez pas ce champ si vous êtes humain\"\n"
  },
  {
    "path": "i18n/nl.yaml",
    "content": "# Single pages\n- id: postedOnDate\n  translation: \"Gepubliceerd op {{ . }}\"\n- id: lastModified\n  translation: \"Laatst gewijzigd op {{ . }}\"\n- id: read\n  translation: \"leestijd\"\n- id: minutesShort\n  translation: \"min\"\n- id: words\n  translation: \"woorden\"\n- id: photoFull\n  translation: \"Foto van %s via %s\"\n- id: photoShort\n  translation: \"Foto van {{ . }}\"\n- id: photoOn\n  translation: \"op\"\n- id: draft\n  translation: \"Concept\"\n- id: published\n  translation: \"Publicatiedatum\"\n\n# List pages\n- id: article\n  translation: \"Artikel\"\n- id: category\n  translation: \"Categorie\"\n- id: articles\n  translation: \"Artikelen\"\n- id: more\n  translation: \"Meer {{ . }}\"\n- id: emptyList\n  translation: \"Geen artikelen gevonden\"\n- id: emptyTags\n  translation: \"Geen tags gevonden\"\n- id: readMore\n  translation: \"Lees meer\"\n\n# Languages\n- id: lang_de\n  translation: \"Duits\"\n- id: lang_en\n  translation: \"Engels\"\n- id: lang_nl\n  translation: \"Nederlands\"\n- id: lang_fr\n  translation: \"Frans\"\n\n# Sharing\n- id: shareLink\n  translation: \"Delen via {{ . }}\"\n- id: shareSystem\n  translation: \"systeem\"\n- id: copyToClipboard\n  translation: \"kopieren naar clipboard\"\n- id: copiedToClipboard\n  translation: \"gekopieerd naar clipboard\"\n- id: link\n  translation: \"Link\"\n- id: code\n  translation: \"Code\"\n- id: download\n  translation: \"Download artikel\"\n\n# Hero\n- id: backgroundImage\n  translation: \"Afbeelding op de achtergrond\"\n- id: heroImage\n  translation: \"Hero afbeelding\"\n\n# Pagination\n- id: paginationNav\n  translation: \"Pagina navigatie\"\n- id: paginationPrevious\n  translation: \"Vorige pagina\"\n- id: paginationNext\n  translation: \"Volgende pagina\"\n- id: paginationFirst\n  translation: \"Eerste pagina\"\n- id: paginationLast\n  translation: \"Laatste pagina\"\n\n# Navigation\n- id: colorMode\n  translation: \"Pas modus aan\"\n- id: colorLight\n  translation: \"Licht\"\n- id: colorDark\n  translation: \"Donker\"\n- id: colorAuto\n  translation: \"Automatisch\"\n- id: toggleMainNav\n  translation: \"Toon of verberg hoofdnavigatie\"\n- id: home\n  translation: \"Home\"\n- id: languageSwitcherLabel\n  translation: \"Taal\"\n- id: close\n  translation: \"Sluiten\"\n\n# Table of contents\n- id: toc\n  translation: \"Inhoudsopgave\"\n- id: seeAlso\n  translation: \"Zie ook\"\n- id: sectionMenu\n  translation: \"Selecteer een onderwerp\"\n- id: tocShowMore\n  translation: \"Toon {{ . }} meer\"\n- id: tocShowLess\n  translation: \"Toon minder\"\n\n# Sidebar\n- id: toggleSidebar\n  translation: \"Toon of verberg navigatie\"\n- id: toggleSecondary\n  translation: \"Toon of verberg meer items\"\n\n# Feature\n- id: addedFeature\n  translation: \"Toegevoegd in {{ . }}\"\n- id: deprecatedFeature\n  translation: \"Afgeschaft in {{ . }}\"\n- id: alternativeFeature\n  translation: \"Gebruik `{{ . }}` in plaats daarvan\"\n\n# Versioning\n- id: latest\n  translation: \"meest recente\"\n- id: allVersions  \n  translation: \"Alle versies\"\n- id: newerVersionAlert\n  translation: \"Er is een nieuwere versie van {{ . }}!\"\n\n# 404 page\n- id: pageNotFound\n  translation: \"Deze pagina bestaat niet of er is een andere fout opgetreden. Ga terug naar het {{ . }}.\"\n- id: pageNotFoundTitle\n  translation: \"Pagina niet gevonden\"\n- id: pageNotFoundHome\n  translation: \"begin\"\n\n# Footer\n- id: copyright\n  translation: \"Copyright\"\n- id: rights\n  translation: \"Alle rechten voorbehouden\"\n- id: poweredBy\n  translation: \"Mede mogelijk gemaakt door {{ . }}\"\n\n# Comments\n- id: show\n  translation: \"Tonen\"\n- id: comments\n  translation: \"Reacties\" \n\n# Arguments\n- id: name\n  translation: \"Naam\"\n- id: type\n  translation: \"Type\"\n- id: required \n  translation: \"Verplicht\"\n- id: default\n  translation: \"Standaardwaarde\"\n- id: comment\n  translation: \"Toelichting\"\n- id: supportedValues\n  translation: \"Toegestane waarden\"\n\n# Alerts\n- id: caution\n  translation: Voorzichtig\n- id: important\n  translation: Belangrijk\n- id: note\n  translation: Opmerking\n- id: tip\n  translation: Tip\n- id: warning\n  translation: Waarschuwing\n\n# Image\n- id: image\n  translation: afbeelding\n\n# Nav & Tab\n- id: clickToExpand\n  translation: \"Klik om open te klappen\"\n\n# Contact information\n- id: contactHeaderTopic\n  translation: \"Wil je meer weten over dit onderwerp?\"\n- id: contactBody\n  translation: \"Laat je gegevens achter en dan neem ik contact met je op.\"\n- id: contactAction\n  translation: \"Neem contact op\"\n\n# Newsletter\n- id: newsletterHeader\n  translation: \"Blijf op de hoogte\"\n- id: newsletterName\n  translation: \"Naam\"\n- id: newsletterEmail\n  translation: \"E-mail\"\n- id: newsletterSubscribe\n  translation: \"Schrijf je in\"\n\n# Testimonial\n- id: testimonialPrevious\n  translation: \"Vorige klantaanbeveling\"\n- id: testimonialNext\n  translation: \"Volgende klantaanbeveling\"\n- id: testimonialCase\n  translation: \"Bekijk klantervaring\"\n\n# Preview\n- id: previewError\n  translation: \"Kan voorbeeld niet laden voor\"\n- id: previewOpenTab\n  translation: \"Open in nieuw tabblad\"\n\n# Contact form fields\n- id: formName\n  translation: \"Naam\"\n- id: formCompany\n  translation: \"Bedrijf\"\n- id: formEmail\n  translation: \"E-mail\"\n- id: formMessage\n  translation: \"Bericht\"\n- id: formSubmit\n  translation: \"Verzenden\"\n- id: formBotField\n  translation: \"Vul dit niet in als je een mens bent\"\n"
  },
  {
    "path": "i18n/pl.yaml",
    "content": "# Single pages\n- id: postedOnDate\n  translation: \"Opublikowano {{ . }}\"\n- id: lastModified\n  translation: \"Ostatnia modyfikacja {{ . }}\"\n- id: read\n  translation: \"czytania\"\n- id: minutesShort\n  translation: \"min\"\n- id: words\n  translation: \"słów\"\n- id: photoFull\n  translation: \"Zdjęcie autorstwa %s z %s\"\n- id: photoShort\n  translation: \"Zdjęcie autorstwa {{ . }}\"\n- id: photoOn\n  translation: \"z\"\n- id: draft\n  translation: \"Wersja robocza\"\n- id: published\n  translation: \"Opublikowano\"\n\n# List pages\n- id: article\n  translation: \"Artykuł\"\n- id: category\n  translation: \"Kategoria\"\n- id: articles\n  translation: \"Artykuły\"\n- id: more\n  translation: \"Więcej {{ . }}\"\n- id: emptyList\n  translation: \"Brak artykułów\"\n- id: emptyTags\n  translation: \"Brak tagów\"\n- id: readMore\n  translation: \"Czytaj więcej\"\n\n# Languages\n- id: lang_de\n  translation: \"Niemiecki\"\n- id: lang_en\n  translation: \"Angielski\"\n- id: lang_nl\n  translation: \"Niderlandzki\"\n- id: lang_fr\n  translation: \"Francuski\"\n\n# Sharing\n- id: shareLink\n  translation: \"Udostępnij przez {{ . }}\"\n- id: shareSystem\n  translation: \"system\"\n- id: copyToClipboard\n  translation: \"skopiuj do schowka\"\n- id: copiedToClipboard\n  translation: \"skopiowany do schowka\"\n- id: link\n  translation: \"Link\"\n- id: code\n  translation: \"Kod\"\n- id: download\n  translation: \"Pobierz artykuł\"\n\n# Hero\n- id: backgroundImage\n  translation: \"Obraz tła\"\n- id: heroImage\n  translation: \"Obraz hero\"\n\n# Pagination\n- id: paginationNav\n  translation: \"Nawigacja strony\"\n- id: paginationPrevious\n  translation: \"Poprzednia strona\"\n- id: paginationNext\n  translation: \"Następna strona\"\n- id: paginationFirst\n  translation: \"Pierwsza strona\"\n- id: paginationLast\n  translation: \"Ostatnia strona\"\n\n# Navigation\n- id: colorMode\n  translation: \"Tryb koloru\"\n- id: colorLight\n  translation: \"Jasny\"\n- id: colorDark\n  translation: \"Ciemny\"\n- id: colorAuto\n  translation: \"Automatyczny\"\n- id: toggleMainNav\n  translation: \"Przełącz główną nawigację\"\n- id: home\n  translation: \"Strona główna\"\n- id: languageSwitcherLabel\n  translation: \"Język\"\n- id: close\n  translation: \"Zamknij\"\n\n# Table of contents\n- id: toc\n  translation: \"Na tej stronie\"\n- id: seeAlso\n  translation: \"Zobacz również\"\n- id: sectionMenu\n  translation: \"Wybierz temat\"\n- id: tocShowMore\n  translation: \"Pokaż {{ . }} więcej\"\n- id: tocShowLess\n  translation: \"Pokaż mniej\"\n\n# Sidebar\n- id: toggleSidebar\n  translation: \"Przełącz nawigację na pasku bocznym\"\n- id: toggleSecondary\n  translation: \"Przełącz więcej elementów\"\n\n# Feature\n- id: addedFeature\n  translation: \"Dodano w {{ . }}\"\n- id: deprecatedFeature\n  translation: \"Stała się przestarzała w {{ . }}\"\n- id: alternativeFeature\n  translation: \"Użyj `{{ . }}` zamiast tego\"\n\n# Versioning\n- id: latest\n  translation: \"najnowsza\"\n- id: allVersions\n  translation: \"Wszystkie wersje\"\n- id: newerVersionAlert\n  translation: \"Jest dostępna nowsza wersja {{ . }}!\"\n\n# 404 page\n- id: pageNotFound\n  translation: \"Strona, której szukasz nie istnieje albo wystąpił inny błąd. Spróbuj wrócić do naszej {{ . }}.\"\n- id: pageNotFoundTitle\n  translation: \"Nie znaleziono strony\"\n- id: pageNotFoundHome\n  translation: \"strony głównej\"\n\n# Footer\n- id: copyright\n  translation: \"Copyright\"\n- id: rights\n  translation: \"Wszelkie prawa zastrzeżone\"\n- id: poweredBy\n  translation: \"Strona oparta o {{ . }}\"\n\n# Comments\n- id: show\n  translation: \"Pokaż\"\n- id: comments\n  translation: \"Komentarze\" \n\n# Arguments\n- id: name\n  translation: \"Nazwa\"\n- id: type\n  translation: \"Typ\"\n- id: required \n  translation: \"Wymagany\"\n- id: default\n  translation: \"Domyślny\"\n- id: comment\n  translation: Komentarz\n- id: supportedValues\n  translation: \"Obsługiwane wartości\"\n\n# Alerts\n- id: caution\n  translation: Ostrożnie\n- id: important\n  translation: Ważne\n- id: note\n  translation: Uwaga\n- id: tip\n  translation: Wskazówka\n- id: warning\n  translation: Ostrzeżenie\n\n# Image\n- id: image\n  translation: obraz\n\n# Nav & Tab\n- id: clickToExpand\n  translation: \"Kliknij, aby rozwinąć\"\n\n# Contact information\n- id: contactHeaderTopic\n  translation: \"Zainteresowany tym tematem?\"\n- id: contactBody\n  translation: \"Prosimy o pozostawienie danych kontaktowych, abyśmy mogli się z Tobą skontaktować.\"\n- id: contactAction\n  translation: \"Skontaktuj się\"\n\n# Newsletter\n- id: newsletterHeader\n  translation: \"Bądź na bieżąco\"\n- id: newsletterName\n  translation: \"Imię\"\n- id: newsletterEmail\n  translation: \"E-mail\"\n- id: newsletterSubscribe\n  translation: \"Subskrybuj\"\n\n# Testimonial\n- id: testimonialPrevious\n  translation: \"Poprzednia opinia\"\n- id: testimonialNext\n  translation: \"Następna opinia\"\n- id: testimonialCase\n  translation: \"Zobacz przypadek klienta\"\n\n# Preview\n- id: previewError\n  translation: \"Nie można załadować podglądu dla\"\n- id: previewOpenTab\n  translation: \"Otwórz w nowej karcie\"\n\n# Contact form fields\n- id: formName\n  translation: \"Imię i nazwisko\"\n- id: formCompany\n  translation: \"Firma\"\n- id: formEmail\n  translation: \"E-mail\"\n- id: formMessage\n  translation: \"Wiadomość\"\n- id: formSubmit\n  translation: \"Wyślij\"\n- id: formBotField\n  translation: \"Nie wypełniaj tego pola, jeśli jesteś człowiekiem\"\n"
  },
  {
    "path": "i18n/pt-br.yaml",
    "content": "# Single pages\n- id: postedOnDate\n  translation: \"Publicado em {{ . }}\"\n- id: lastModified\n  translation: \"Última modificação em {{ . }}\"\n- id: read\n  translation: \"ler\"\n- id: minutesShort\n  translation: \"min\"\n- id: words\n  translation: \"palavras\"\n- id: photoFull\n  translation: \"Foto de %s em %s\"\n- id: photoShort\n  translation: \"Foto de {{ . }}\"\n- id: photoOn\n  translation: \"em\"\n- id: draft\n  translation: \"Rascunho\"\n- id: published\n  translation: \"Publicado\"\n\n# List pages\n- id: article\n  translation: \"Artigo\"\n- id: category\n  translation: \"Categoria\"\n- id: articles\n  translation: \"Artigos\"\n- id: more\n  translation: \"Mais {{ . }}\"\n- id: emptyList\n  translation: \"Nenhum artigo encontrado\"\n- id: emptyTags\n  translation: \"Nenhuma tag encontrada\"\n- id: readMore\n  translation: \"Ler mais\"\n\n# Languages\n- id: lang_de\n  translation: \"Alemão\"\n- id: lang_en\n  translation: \"Inglês\"\n- id: lang_nl\n  translation: \"Holandês\"\n- id: lang_fr\n  translation: \"Francês\"\n- id: lang_pt\n  translation: \"Português\"\n\n# Sharing\n- id: shareLink\n  translation: \"Compartilhe via {{ . }}\"\n- id: shareSystem\n  translation: \"sistema\"\n- id: copyToClipboard\n  translation: \"copiar para área de transferência\"\n- id: copiedToClipboard\n  translation: \"copiado para área de transferência\"\n- id: link\n  translation: \"Link\"\n- id: code\n  translation: \"Código\"\n- id: download\n  translation: \"Baixar artigo\"\n\n# Hero\n- id: backgroundImage\n  translation: \"Imagem de fundo\"\n- id: heroImage\n  translation: \"Imagem principal\"\n\n# Pagination\n- id: paginationNav\n  translation: \"Navegação da página\"\n- id: paginationPrevious\n  translation: \"Página anterior\"\n- id: paginationNext\n  translation: \"Página seguinte\"\n- id: paginationFirst\n  translation: \"Primeira página\"\n- id: paginationLast\n  translation: \"Última página\"\n\n# Navigation\n- id: colorMode\n  translation: \"Mudar tema\"\n- id: colorLight\n  translation: \"Claro\"\n- id: colorDark\n  translation: \"Escuro\"\n- id: colorAuto\n  translation: \"Auto\"\n- id: toggleMainNav\n  translation: \"Mostrar/Ocultar menu principal\"\n- id: home\n  translation: \"Início\"\n- id: languageSwitcherLabel\n  translation: \"Idioma\"\n- id: close\n  translation: \"Fechar\"\n\n# Table of contents\n- id: toc\n  translation: \"Nesta página\"\n- id: seeAlso\n  translation: \"Veja também\"\n- id: sectionMenu\n  translation: \"Selecionar um tópico\"\n- id: tocShowMore\n  translation: \"Mostrar {{ . }} mais\"\n- id: tocShowLess\n  translation: \"Mostrar menos\"\n\n# Sidebar\n- id: toggleSidebar\n  translation: \"Mostrar/Ocultar barra lateral\"\n- id: toggleSecondary\n  translation: \"Mostrar/Ocultar mais itens\"\n\n# Feature\n- id: addedFeature\n  translation: \"Adicionado em {{ . }}\"\n- id: deprecatedFeature\n  translation: \"Descontinuado em {{ . }}\"\n- id: alternativeFeature\n  translation: \"Use `{{ . }}` em vez disso\"\n\n# Versioning\n- id: latest\n  translation: \"Mais recente\"\n- id: allVersions\n  translation: \"Todas as versões\"\n- id: newerVersionAlert\n  translation: \"Existe uma versão mais recente de {{ . }}!\"\n\n# 404 page\n- id: pageNotFound\n  translation: \"A página que você está procurando não existe ou ocorreu algum outro erro. Tente voltar para a {{ . }}.\"\n- id: pageNotFoundTitle\n  translation: \"Página não encontrada\"\n- id: pageNotFoundHome\n  translation: \"página inicial\"\n\n# Footer\n- id: copyright\n  translation: \"Copyright\"\n- id: rights\n  translation: \"Todos os direitos reservados\"\n- id: poweredBy\n  translation: \"Com tecnologia {{ . }}\"\n\n# Comments\n- id: show\n  translation: \"Mostrar\"\n- id: comments\n  translation: \"Comentários\"\n\n# Arguments\n- id: name\n  translation: \"Nome\"\n- id: type\n  translation: \"Tipo\"\n- id: required \n  translation: \"Obrigatório\"\n- id: default\n  translation: \"Padrão\"\n- id: comment\n  translation: \"Comentário\"\n- id: supportedValues\n  translation: \"Valores suportados\"\n\n  # Alerts\n- id: caution\n  translation: Atenção\n- id: important\n  translation: Importante\n- id: note\n  translation: Observação\n- id: tip\n  translation: Dica\n- id: warning\n  translation: Aviso\n\n# Image\n- id: image\n  translation: imagem\n\n# Nav & Tab\n- id: clickToExpand\n  translation: \"Clique para expandir\"\n\n# Contact information\n- id: contactHeaderTopic\n  translation: \"Interessado neste tópico?\"\n- id: contactBody\n  translation: \"Por favor, deixe seus detalhes de contato para que possamos entrar em contato com você.\"\n- id: contactAction\n  translation: \"Entre em contato\"\n\n# Newsletter\n- id: newsletterHeader\n  translation: \"Fique informado\"\n- id: newsletterName\n  translation: \"Nome\"\n- id: newsletterEmail\n  translation: \"E-mail\"\n- id: newsletterSubscribe\n  translation: \"Inscrever-se\"\n\n# Testimonial\n- id: testimonialPrevious\n  translation: \"Depoimento anterior\"\n- id: testimonialNext\n  translation: \"Próximo depoimento\"\n- id: testimonialCase\n  translation: \"Ver estudo de caso do cliente\"\n\n# Preview\n- id: previewError\n  translation: \"Não foi possível carregar a visualização para\"\n- id: previewOpenTab\n  translation: \"Abrir em nova aba\"\n\n# Contact form fields\n- id: formName\n  translation: \"Nome\"\n- id: formCompany\n  translation: \"Empresa\"\n- id: formEmail\n  translation: \"E-mail\"\n- id: formMessage\n  translation: \"Mensagem\"\n- id: formSubmit\n  translation: \"Enviar\"\n- id: formBotField\n  translation: \"Não preencha isto se você for humano\"\n"
  },
  {
    "path": "i18n/zh-hans.yaml",
    "content": "# Single pages\n- id: postedOnDate\n  translation: \"发布于 {{ . }}\"\n- id: lastModified\n  translation: \"最后修改于 {{ . }}\"\n- id: read\n  translation: \"阅读\"\n- id: minutesShort\n  translation: \"分钟\"\n- id: words\n  translation: \"字\"\n- id: photoFull\n  translation: \"照片由 %s 于 %s 拍摄\"\n- id: photoShort\n  translation: \"照片由 {{ . }} 拍摄\"\n- id: photoOn\n  translation: \"于\"\n- id: draft\n  translation: \"草稿\"\n- id: published\n  translation: \"已发布\"\n\n# List pages\n- id: article\n  translation: \"文章\"\n- id: category\n  translation: \"分类\"\n- id: articles\n  translation: \"文章\"\n- id: more\n  translation: \"更多 {{ . }}\"\n- id: emptyList\n  translation: \"没有找到文章\"\n- id: emptyTags\n  translation: \"没有找到标签\"\n- id: readMore\n  translation: \"阅读更多\"\n\n# Languages\n- id: lang_de\n  translation: \"German\"\n- id: lang_en\n  translation: \"English\"\n- id: lang_nl\n  translation: \"Dutch\"\n- id: lang_fr\n  translation: \"French\"\n\n# Sharing\n- id: shareLink\n  translation: \"分享至 {{ . }}\"\n- id: shareSystem\n  translation: \"系统\"\n- id: copyToClipboard\n  translation: \"复制到剪贴板\"\n- id: copiedToClipboard\n  translation: \"已复制到剪贴板\"\n- id: link\n  translation: \"链接\"\n- id: code\n  translation: \"代码\"\n- id: download\n  translation: \"下载文章\"\n\n# Hero\n- id: backgroundImage\n  translation: \"背景图片\"\n- id: heroImage\n  translation: \"主图\"\n\n# Pagination\n- id: paginationNav\n  translation: \"页面导航\"\n- id: paginationPrevious\n  translation: \"上一页\"\n- id: paginationNext\n  translation: \"下一页\"\n- id: paginationFirst\n  translation: \"第一页\"\n- id: paginationLast\n  translation: \"最后一页\"\n\n# Navigation\n- id: colorMode\n  translation: \"切换主题\"\n- id: colorLight\n  translation: \"亮色\"\n- id: colorDark\n  translation: \"暗色\"\n- id: colorAuto\n  translation: \"自动\"\n- id: toggleMainNav\n  translation: \"切换主导航\"\n- id: home\n  translation: \"首页\"\n- id: languageSwitcherLabel\n  translation: \"语言\"\n- id: close\n  translation: \"关闭\"\n\n# Table of contents\n- id: toc\n  translation: \"本页目录\"\n- id: seeAlso\n  translation: \"参见\"\n- id: sectionMenu\n  translation: \"选择一个主题\"\n- id: tocShowMore\n  translation: \"显示 {{ . }} 更多\"\n- id: tocShowLess\n  translation: \"显示更少\"\n\n# Sidebar\n- id: toggleSidebar\n  translation: \"切换侧边栏导航\"\n- id: toggleSecondary\n  translation: \"切换更多项目\"\n\n# Feature\n- id: addedFeature\n  translation: \"新增于 {{ . }}\"\n- id: deprecatedFeature\n  translation: \"已弃用于 {{ . }}\"\n- id: alternativeFeature\n  translation: \"请改用 `{{ . }}`\"\n\n# Versioning\n- id: latest\n  translation: \"最新\"\n- id: allVersions\n  translation: \"所有版本\"\n- id: newerVersionAlert\n  translation: \"有一个更新版本的 {{ . }}!\"\n\n# 404 page\n- id: pageNotFound\n  translation: \"您访问的页面不存在或发生了其他错误。请返回我们的{{ . }}。\"\n- id: pageNotFoundTitle\n  translation: \"页面未找到\"\n- id: pageNotFoundHome\n  translation: \"首页\"\n\n# Footer\n- id: copyright\n  translation: \"Copyright\"\n- id: rights\n  translation: \"版权所有\"\n- id: poweredBy\n  translation: \"由 {{ . }} 提供支持。\"\n\n# Comments\n- id: show\n  translation: \"显示\"\n- id: comments\n  translation: \"评论\"\n\n# Arguments\n- id: name\n  translation: \"名称\"\n- id: type\n  translation: \"类型\"\n- id: required\n  translation: \"必填\"\n- id: default\n  translation: \"默认值\"\n- id: comment\n  translation: \"说明\"\n- id: supportedValues\n  translation: \"支持的值\"\n\n# Alerts\n- id: caution\n  translation: 注意\n- id: important\n  translation: 重要\n- id: note\n  translation: 提示\n- id: tip\n  translation: 技巧\n- id: warning\n  translation: 警告\n\n# Image\n- id: image\n  translation: 图片\n\n# Nav & Tab\n- id: clickToExpand\n  translation: \"点击展开\"\n\n# Contact information\n- id: contactHeaderTopic\n  translation: \"对这个主题感兴趣？\"\n- id: contactBody\n  translation: \"请留下您的联系方式，以便我们与您联系。\"\n- id: contactAction\n  translation: \"联系我们\"\n\n# Newsletter\n- id: newsletterHeader\n  translation: \"保持关注\"\n- id: newsletterName\n  translation: \"姓名\"\n- id: newsletterEmail\n  translation: \"电子邮件\"\n- id: newsletterSubscribe\n  translation: \"订阅\"\n\n# Testimonial\n- id: testimonialPrevious\n  translation: \"上一条评价\"\n- id: testimonialNext\n  translation: \"下一条评价\"\n- id: testimonialCase\n  translation: \"查看客户案例\"\n\n# Preview\n- id: previewError\n  translation: \"无法加载预览\"\n- id: previewOpenTab\n  translation: \"在新标签页中打开\"\n\n# Contact form fields\n- id: formName\n  translation: \"姓名\"\n- id: formCompany\n  translation: \"公司\"\n- id: formEmail\n  translation: \"电子邮件\"\n- id: formMessage\n  translation: \"消息\"\n- id: formSubmit\n  translation: \"提交\"\n- id: formBotField\n  translation: \"如果您是人类，请不要填写此项\"\n"
  },
  {
    "path": "i18n/zh-hant.yaml",
    "content": "# Single pages\n- id: postedOnDate\n  translation: \"發佈於 {{ . }}\"\n- id: lastModified\n  translation: \"最後修改於 {{ . }}\"\n- id: read\n  translation: \"閱讀\"\n- id: minutesShort\n  translation: \"分鐘\"\n- id: words\n  translation: \"字\"\n- id: photoFull\n  translation: \"照片由 %s 於 %s 拍攝\"\n- id: photoShort\n  translation: \"照片由 {{ . }} 拍攝\"\n- id: photoOn\n  translation: \"於\"\n- id: draft\n  translation: \"草稿\"\n- id: published\n  translation: \"已發布\"\n\n# List pages\n- id: article\n  translation: \"文章\"\n- id: category\n  translation: \"分類\"\n- id: articles\n  translation: \"文章\"\n- id: more\n  translation: \"更多 {{ . }}\"\n- id: emptyList\n  translation: \"沒有找到文章\"\n- id: emptyTags\n  translation: \"沒有找到標籤\"\n- id: readMore\n  translation: \"閱讀更多\"\n\n# Languages\n- id: lang_de\n  translation: \"German\"\n- id: lang_en\n  translation: \"English\"\n- id: lang_nl\n  translation: \"Dutch\"\n- id: lang_fr\n  translation: \"French\"\n\n# Sharing\n- id: shareLink\n  translation: \"分享至 {{ . }}\"\n- id: shareSystem\n  translation: \"系統\"\n- id: copyToClipboard\n  translation: \"複製到剪貼板\"\n- id: copiedToClipboard\n  translation: \"已複製到剪貼板\"\n- id: link\n  translation: \"連結\"\n- id: code\n  translation: \"程式碼\"\n- id: download\n  translation: \"下載文章\"\n\n# Hero\n- id: backgroundImage\n  translation: \"背景圖片\"\n- id: heroImage\n  translation: \"主圖\"\n\n# Pagination\n- id: paginationNav\n  translation: \"頁面導航\"\n- id: paginationPrevious\n  translation: \"上一頁\"\n- id: paginationNext\n  translation: \"下一頁\"\n- id: paginationFirst\n  translation: \"第一頁\"\n- id: paginationLast\n  translation: \"最後一頁\"\n\n# Navigation\n- id: colorMode\n  translation: \"切換主題\"\n- id: colorLight\n  translation: \"亮色\"\n- id: colorDark\n  translation: \"暗色\"\n- id: colorAuto\n  translation: \"自動\"\n- id: toggleMainNav\n  translation: \"切換主導航\"\n- id: home\n  translation: \"首頁\"\n- id: languageSwitcherLabel\n  translation: \"語言\"\n- id: close\n  translation: \"關閉\"\n\n# Table of contents\n- id: toc\n  translation: \"本頁目錄\"\n- id: seeAlso\n  translation: \"參見\"\n- id: sectionMenu\n  translation: \"選擇一個主題\"\n- id: tocShowMore\n  translation: \"顯示 {{ . }} 更多\"\n- id: tocShowLess\n  translation: \"顯示更少\"\n\n# Sidebar\n- id: toggleSidebar\n  translation: \"切換側邊欄導航\"\n- id: toggleSecondary\n  translation: \"切換更多項目\"\n\n# Feature\n- id: addedFeature\n  translation: \"新增於 {{ . }}\"\n- id: deprecatedFeature\n  translation: \"已棄用於 {{ . }}\"\n- id: alternativeFeature\n  translation: \"請改用 `{{ . }}`\"\n\n# Versioning\n- id: latest\n  translation: \"最新\"\n- id: allVersions\n  translation: \"所有版本\"\n- id: newerVersionAlert\n  translation: \"有一個更新版本的 {{ . }}!\"\n\n# 404 page\n- id: pageNotFound\n  translation: \"您訪問的頁面不存在或發生了其他錯誤。請返回我們的{{ . }}。\"\n- id: pageNotFoundTitle\n  translation: \"頁面未找到\"\n- id: pageNotFoundHome\n  translation: \"首頁\"\n\n# Footer\n- id: copyright\n  translation: \"Copyright\"\n- id: rights\n  translation: \"版權所有\"\n- id: poweredBy\n  translation: \"由 {{ . }} 提供支持。\"\n\n# Comments\n- id: show\n  translation: \"顯示\"\n- id: comments\n  translation: \"評論\"\n\n# Arguments\n- id: name\n  translation: \"名稱\"\n- id: type\n  translation: \"類型\"\n- id: required\n  translation: \"必填\"\n- id: default\n  translation: \"預設值\"\n- id: comment\n  translation: \"說明\"\n- id: supportedValues\n  translation: \"支援的值\"\n\n# Alerts\n- id: caution\n  translation: 注意\n- id: important\n  translation: 重要\n- id: note\n  translation: 提示\n- id: tip\n  translation: 技巧\n- id: warning\n  translation: 警告\n\n# Image\n- id: image\n  translation: 圖片\n\n# Nav & Tab\n- id: clickToExpand\n  translation: \"點擊展開\"\n\n# Contact information\n- id: contactHeaderTopic\n  translation: \"對這個主題感興趣？\"\n- id: contactBody\n  translation: \"請留下您的聯絡方式，以便我們與您聯繫。\"\n- id: contactAction\n  translation: \"聯絡我們\"\n\n# Newsletter\n- id: newsletterHeader\n  translation: \"保持關注\"\n- id: newsletterName\n  translation: \"姓名\"\n- id: newsletterEmail\n  translation: \"電子郵件\"\n- id: newsletterSubscribe\n  translation: \"訂閱\"\n\n# Testimonial\n- id: testimonialPrevious\n  translation: \"上一條評價\"\n- id: testimonialNext\n  translation: \"下一條評價\"\n- id: testimonialCase\n  translation: \"查看客戶案例\"\n\n# Preview\n- id: previewError\n  translation: \"無法載入預覽\"\n- id: previewOpenTab\n  translation: \"在新分頁中開啟\"\n\n# Contact form fields\n- id: formName\n  translation: \"姓名\"\n- id: formCompany\n  translation: \"公司\"\n- id: formEmail\n  translation: \"電子郵件\"\n- id: formMessage\n  translation: \"訊息\"\n- id: formSubmit\n  translation: \"提交\"\n- id: formBotField\n  translation: \"如果您是人類，請不要填寫此欄\"\n"
  },
  {
    "path": "layouts/404.html",
    "content": "{{ define \"main\" }}\n    {{ $base := partial \"utilities/GetStaticURL\" (dict \"url\" \"/\") }}\n    {{- $notFoundPage := partial \"utilities/GetThemeIcon.html\" (dict \"id\" \"notFoundPage\" \"default\" \"fas link-slash\") -}}\n    <section class=\"container-fluid p-0 section-cover d-flex align-items-center\">\n        <div class=\"container-xxl my-auto h-100\">\n            <div class=\"col-12 col-sm-8 col-md-6 text-center mx-auto\">\n                <span class=\"text-secondary fw-bold\">\n                    {{ partial \"assets/icon.html\" (dict \"icon\" $notFoundPage \"class\" \"fa-10x\") }}\n                    <p class=\"display-1 mt-3 fw-bold\">404</p>\n                    <p class=\"fs-3\">{{ T \"pageNotFoundTitle\" }}</p>\n                </span>\n                {{- $home := printf `<a href=\"%s\">%s</a>` $base (T \"pageNotFoundHome\") -}}\n                <p>{{ T \"pageNotFound\" $home | safeHTML }}</p>\n            </div>\n        </div>\n    </section>\n{{ end }}\n"
  },
  {
    "path": "layouts/_markup/render-blockquote.html",
    "content": "{{/* Adapted from https://gohugo.io/render-hooks/blockquotes/#alerts */}}\n\n{{- $admonition := partial \"utilities/GetThemeIcon.html\" (dict \"id\" \"admonition\" \"default\" dict) -}}\n{{ $icons := dict\n    \"note\"      ($admonition.note      | default \"fas circle-info\")\n    \"info\"      ($admonition.info      | default \"fas circle-info\")\n    \"tip\"       ($admonition.tip       | default \"fa lightbulb\")\n    \"important\" ($admonition.important | default \"fas exclamation\")\n    \"warning\"   ($admonition.warning   | default \"fas triangle-exclamation\")\n    \"caution\"   ($admonition.caution   | default \"fa hand\")\n}}\n\n{{ if eq .Type \"alert\" }}\n    {{ $alert := .AlertType }}\n    {{ $icon := (index $icons $alert) }}\n\n    <blockquote class=\"blockquote-alert blockquote-alert-{{ $alert }}\">\n        <p class=\"blockquote-alert-heading\">\n            {{ with $icon }} \n                {{ partial \"assets/icon.html\" (dict \"icon\" . \"class\" \"fa-fw\") }}\n                {{ or (i18n $alert) (title $alert) }}\n            {{ else }}\n                {{ title $alert }}\n                {{ warnf \"Unsupported alert type: '%s'. See %s\" $alert $.Position }}\n            {{ end }}\n        </p>\n    {{ trim .Text \"\\n\\r\" | safeHTML }}\n    </blockquote>\n{{ else }}\n    <blockquote class=\"blockquote\">\n        {{ trim .Text \"\\n\\r\" | safeHTML }}\n    </blockquote>\n{{ end }}"
  },
  {
    "path": "layouts/_markup/render-codeblock-math.html",
    "content": "{{ with try (transform.ToMath .Inner (dict \"displayMode\" true)) }}\n    {{ with .Err }}\n        {{ errorf \"Failed to render KaTeX: %q. See %s\" . $.Position }}\n    {{ else }}\n        {{ if $.Attributes.class }}\n            <div class=\"{{ $.Attributes.class | safeHTMLAttr }}\">{{ .Value }}</div>\n        {{ else }}\n            {{ .Value }}\n        {{ end }}\n    {{ end }}\n{{ end }}\n"
  },
  {
    "path": "layouts/_markup/render-codeblock.html",
    "content": "<div class=\"codeblock syntax-highlight mb-3\">\n    {{- $result := transform.HighlightCodeBlock . -}}\n    {{- $result.Wrapped -}}\n</div>"
  },
  {
    "path": "layouts/_markup/render-heading.html",
    "content": "{{ $class := .Attributes.class }}\n{{ $text := chomp .Text }}\n{{ if and site.Params.main.titleCase (not .Page.Params.exact) }}{{ $text = (title ($text | htmlUnescape)) | htmlEscape }}{{ end }}\n{{- $headingAnchor := partial \"utilities/GetThemeIcon.html\" (dict \"id\" \"headingAnchor\" \"default\" \"fas link\") -}}\n\n{{/* Strip Hugo's HAHAHUGOSHORTCODE placeholder from .Anchor — different render passes\n     assign different counters, so the raw anchor would not match the TOC link. */}}\n{{- $anchor := replaceRE `(?i)hahahugoshortcode\\d+s\\d+hbhb` \"-\" .Anchor -}}\n{{- $anchor = trim (replaceRE `-+` \"-\" $anchor) \"-\" -}}\n\n{{ if and site.Params.navigation.anchor $text }}\n<h{{ .Level }} id=\"{{ $anchor | safeURL }}\" class=\"heading {{ with $class }}{{ . }}{{ end }}\">\n    {{- $text | safeHTML -}}\n    <a href=\"#{{ $anchor | safeURL }}\" aria-labelledby=\"{{ $anchor | safeURL }}\">\n        {{- partial \"assets/icon.html\" (dict \"icon\" $headingAnchor \"class\" \"anchor\") }}\n    </a>\n</h{{ .Level }}>\n{{ else }}\n<h{{ .Level }} id=\"{{ $anchor | safeURL }}\" {{ with $class }} class=\"{{ . }}\"{{ end }}>{{ $text | safeHTML }}</h{{ .Level }}>\n{{ end }}"
  },
  {
    "path": "layouts/_markup/render-image.html",
    "content": "{{ partial \"assets/image.html\" (dict \n    \"src\"      .Destination\n    \"page\"     .Page\n    \"caption\"  .Title\n    \"title\"    .Text \n    \"anchor\"   .Attributes.anchor\n    \"class\"    .Attributes.class\n    \"figclass\" .Attributes.figclass\n    \"loading\"  .Attributes.loading\n    \"mode\"     .Attributes.mode\n    \"plain\"    .Attributes.plain\n    \"portrait\" .Attributes.portrait\n    \"ratio\"    .Attributes.ratio\n    \"wrapper\"  .Attributes.wrapper\n) }}\n"
  },
  {
    "path": "layouts/_markup/render-link.html",
    "content": "{{- if gt (findRE `^HAHAHUGO` .Destination 1) 0 -}}\n    {{- errorf \"Invalid markdown link destination, use '%s' syntax when using shortcodes as input. See '%s'\" \n        (\"&#123;&#123;% %&#125;&#125;\" | htmlUnescape)\n        .Page.File.Path\n    -}}\n{{- else if not .Destination -}}\n    {{- errorf \"Missing markdown link destination,  see '%s'\" .Page.File.Path -}}\n{{- else -}}\n    {{- partial \"assets/link.html\" (dict \n        \"href\"  .Destination\n        \"page\"  .Page\n        \"text\"  (.Text | htmlUnescape)\n        \"title\" (.Title | htmlUnescape)\n    ) -}}\n{{- end -}}"
  },
  {
    "path": "layouts/_markup/render-passthrough.html",
    "content": "{{ $opts := dict }}\n\n{{ if eq .Type \"block\" }}\n    {{ $opts = dict \"displayMode\" true }}\n{{ end }}\n\n{{ with try (transform.ToMath .Inner $opts) }}\n    {{ with .Err }}\n        {{ errorf \"Failed to render KaTeX: %q. See %s\" . $.Position }}\n    {{ else }}\n        {{ .Value }}\n    {{ end }}\n{{ end }}\n"
  },
  {
    "path": "layouts/_markup/render-table.html",
    "content": "{{/* Adapted from https://gohugo.io/render-hooks/tables/ */}}\n\n{{/* Ensure presence of `.table` class attribute to trigger Bootstrap styling */}}\n{{ $attr := .Attributes }}\n{{ $class := split $attr.class \" \" }}\n{{ if not (in $class \"table\") }}\n    {{ $attr = merge $attr (dict \"class\" (trim (delimit ($class | append \"table\") \" \") \" \")) }}\n{{ end }}\n\n{{ $wrap := in $class \"table-wrap\" }}\n{{ $align := dict \"left\" \"start\" \"center\" \"center\" \"right\" \"end\" }}\n\n{{ $header := \"\" }}\n<table\n  {{- range $k, $v := $attr }}\n    {{- if $v }}\n      {{- printf \" %s=%q\" $k $v | safeHTMLAttr }}\n    {{- end }}\n  {{- end }}>\n  <thead>\n    {{- range .THead }}\n    {{ $length := len . }}\n      {{ if $wrap }}\n        <tr>\n          {{- range . | first (sub $length 1) }}\n            <th {{ with .Alignment }}class=\"text-{{ index $align . }}\"{{ end }}>\n              {{- .Text -}}\n            </th>\n          {{- end }}\n          {{- range . | last 1 }}\n            {{ $header = .Text }}\n          {{ end }}\n        </tr>\n      {{ else }}\n      <tr>\n        {{- range . }}\n          <th {{ with .Alignment }}class=\"text-{{ index $align . }}\"{{ end }}>\n            {{- .Text -}}\n          </th>\n        {{- end }}\n      </tr>\n    {{ end }}\n    {{- end }}\n  </thead>\n  <tbody>\n    {{- range .TBody }}\n    {{ $length := len . }}\n      {{ if $wrap }}\n      <tr>\n        {{- range . | first (sub $length 1) }}\n          <td class=\"{{ with .Alignment }}text-{{ index $align . }}{{ end }} table-border-bottom-wrap\">\n            {{- .Text -}}\n          </td>\n        {{- end }}\n      </tr>\n      <tr>\n        {{- range . | last 1 }}\n          <td class=\"{{ with .Alignment }}text-{{ index $align . }}{{ end }}\" colspan=\"{{ (sub $length 1) }}\">\n            {{- .Text -}}\n          </td>\n        {{ end }}\n      </tr>\n      {{ else }}\n        <tr>\n          {{- range . }}\n            <td {{ with .Alignment }}class=\"text-{{ index $align . }}\"{{ end }}>\n              {{- .Text -}}\n            </td>\n          {{- end }}\n        </tr>\n      {{ end }}\n    {{- end }}\n  </tbody>\n</table>"
  },
  {
    "path": "layouts/_partials/assets/adapters/cloudinary.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{ $error := false }}\n\n{{ $anchorMap := dict\n    \"TopLeft\"     \"north_west\"\n    \"Top\"         \"north\"\n    \"TopRight\"    \"north_east\"\n    \"Left\"        \"west\"\n    \"Center\"      \"center\"\n    \"Right\"       \"east\"\n    \"BottomLeft\"  \"south_west\"\n    \"Bottom\"      \"south\"\n    \"BottomRight\" \"south_east\"\n    \"Smart\"       \"auto\"\n}}\n\n{{/* Initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"image-adapter\" \"args\" . \"group\" \"partial\") }}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\" \"assets/adapter/cloudinary.html\" \n        \"warnid\"  \"warn-invalid-arguments\"\n        \"msg\"     \"Invalid arguments\"\n        \"details\" ($args.errmsg | append $args.warnmsg)\n        \"file\"    page.File\n    )}}\n    {{ $error = $args.err }}\n{{ end }}\n\n{{/* Initialize arguments */}}\n{{ $file := or $args.urlFile $args.file }}\n{{ if not $file }}\n    {{ partial \"utilities/LogErr.html\" (dict \n        \"partial\" \"assets/adapter/cloudinary.html\" \n        \"msg\"     \"Invalid arguments\"\n        \"details\" slice \"argument 'url-file': expected value\"\n        \"file\"    page.File\n    )}}\n    {{ $error = true }}\n{{ end }}\n\n{{ $dir := or $args.urlDir $args.dir }}\n{{ $host := or $args.urlHost $args.host }}\n{{ $height := or $args.imageHeight $args.height -}}\n{{ $width := or $args.imageWidth $args.width -}}\n{{ $transform := $args.transform }}\n{{ if eq $transform \"fill\" }}{{ $transform = \"c_fill\" }}{{ else }}{{ $transform = \"c_fit\" }}{{ end }}\n{{ $anchor := \"\" }}\n{{ with $args.anchor }}{{ $anchor = index $anchorMap . }}{{ end }}\n{{ $element := \"\" }}\n\n{{/* Split path between upload dir and sub dir */}}\n{{ $dir = path.Clean (trim $dir \"/\") }}\n{{ $api := \"image/upload\" }}\n\n{{/* Define the account, optional API segment, and directory */}}\n{{ $elements := split $dir \"/\" }}\n{{ $account := index $elements 0 }}\n{{ $operation := \"\" }}\n{{ if and (in (slice \"image\" \"video\") (index $elements 1)) (eq (index $elements 2) \"upload\") }}\n    {{ $api = delimit (slice | append (index $elements 1) | append (index $elements 2)) \"/\" }}\n    {{ $dir = delimit (after 3 $elements) \"/\" }}\n{{ else }}\n    {{ $dir = delimit (after 1 $elements) \"/\" }}\n{{ end }}\n\n{{/* Generate image URL */}}\n{{ if not $error }}\n    {{ if $args.format }}\n        {{ $operation = printf \"%s,h_%d,w_%d\" $transform $height $width }}\n        {{ $file = printf \"%s.%s\" (strings.TrimSuffix (path.Ext $file) $file) $args.format }}\n    {{ else }}\n        {{ $operation = printf \"f_auto,%s,h_%d,w_%d\" $transform $height $width }}\n    {{ end }}\n    {{ with $anchor }}\n        {{ $operation = printf \"%s,g_%s\" $operation . }}\n    {{ end }}\n    {{- $element = partial \"utilities/URLJoin.html\" (dict \"elements\" (slice \"https://\" $host $account $api $operation $dir $file)) -}}\n{{ end }}\n\n{{ return $element }}\n"
  },
  {
    "path": "layouts/_partials/assets/adapters/hugo.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{ $error := false }}\n\n{{/* Initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"image-adapter\" \"args\" . \"group\" \"partial\") }}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\" \"assets/adapter/hugo.html\" \n        \"warnid\"  \"warn-invalid-arguments\"\n        \"msg\"     \"Invalid arguments\"\n        \"details\" ($args.errmsg | append $args.warnmsg)\n        \"file\"    page.File\n    )}}\n    {{ $error = $args.err }}\n{{ end }}\n\n{{/* Initialize arguments */}}\n{{ $img := $args.img }}\n{{ $element := \"\" }}\n{{ $file := or $args.urlFile $args.file }}\n{{ if not $file }}\n    {{ partial \"utilities/LogErr.html\" (dict \n        \"partial\" \"assets/adapter/hugo.html\" \n        \"msg\"     \"Invalid arguments\"\n        \"details\" slice \"argument 'url-file': expected value\"\n        \"file\"    page.File\n    )}}\n    {{ $error = true }}\n{{ end }}\n{{ $dir := or $args.urlDir $args.dir }}\n{{ $host := or $args.urlHost $args.host }}\n{{ $url := partial \"utilities/URLJoin.html\" (dict \"elements\" (slice $dir $file)) }}\n{{ if $host }}\n    {{ $url = partial \"utilities/URLJoin.html\" (dict \"elements\" (slice \"https://\" $host $url)) }}\n{{ end }}\n{{ $height := or $args.imageHeight $args.height -}}\n{{ $width := or $args.imageWidth $args.width -}}\n\n{{/* Initialize image if needed, do not raise additional warnings */}}\n{{ if and (not $img) (ne $args.format \"svg\") }}\n    {{- $res := partial \"utilities/GetImage.html\" (dict \"url\" $url \"page\" page) -}}\n    {{ if $res }}\n        {{ $img = $res.resource }}\n        {{/* TODO: $res.mirror  */}}\n    {{ end }}\n\n    {{ if not $img }}\n        {{ $error = true }}\n    {{ end }}\n{{ end }}\n\n\n{{/* Process image and generate image URL */}}\n{{ if not $error }}\n    {{ $scaled := \"\" }}\n    {{ if eq $args.transform \"fill\" }}\n        {{- $scaled = $img.Fill (printf \"%dx%d %s %s\" $width $height $args.anchor $args.format) -}}\n    {{ else }}\n        {{- $scaled = $img.Fit (printf \"%dx%d %s\" $width $height $args.format) -}}\n    {{ end }}\n\n    {{- $clean := path.Ext $img.RelPermalink -}}\n    {{ $destination := \"\" }}\n    {{ if $args.anchor }}\n        {{ $destination = printf \"-%dx%d-%s.%s\" $width $height (lower $args.anchor) $args.format }}\n    {{ else }}\n        {{ $destination = printf \"-%dx%d.%s\" $width $height $args.format }}\n    {{ end }}\n\n    {{- $scaled = $scaled | resources.Copy (replace $img.RelPermalink $clean $destination) -}}\n    {{- if or $args.absoluteUrl $args.absoluteURL -}}\n        {{- $element = $scaled.Permalink -}}\n    {{- else -}}\n        {{- $element = $scaled.RelPermalink -}}\n    {{- end -}}\n{{ end }}\n\n{{ return $element }}\n"
  },
  {
    "path": "layouts/_partials/assets/adapters/imagekit-rewrite.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{ $error := false }}\n\n{{/* Initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"image-adapter-rewrite\" \"args\" . \"group\" \"partial\") }}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\" \"assets/adapter/imagekit-rewrite.html\" \n        \"warnid\"  \"warn-invalid-arguments\"\n        \"msg\"     \"Invalid arguments\"\n        \"details\" ($args.errmsg | append $args.warnmsg)\n        \"file\"    page.File\n    )}}\n    {{ $error = $args.err }}\n{{ end }}\n\n{{/* Initialize local arguments */}}\n{{ $container := trim $args.container \"/\" }}\n{{ $file := or $args.urlFile $args.file }}\n{{ if not $file }}\n    {{ partial \"utilities/LogErr.html\" (dict \n        \"partial\" \"assets/adapter/imagekit-rewrite.html\" \n        \"msg\"     \"Invalid arguments\"\n        \"details\" slice \"argument 'url-file': expected value\"\n        \"file\"    page.File\n    )}}\n    {{ $error = true }}\n{{ end }}\n{{ $dir := or $args.urlDir $args.dir }}\n{{ $host := or $args.urlHost $args.host }}\n{{ $element := \"\" }}\n{{ with $container }}{{ $dir = strings.TrimPrefix (printf \"/%s\" .) $dir }}{{ end }}\n\n{{ if ne $host \"ik.imagekit.io\" }}\n    {{ $element = partial \"utilities/URLJoin.html\" (dict \"elements\" (slice \"https://ik.imagekit.io\" $args.account $dir $file)) }}\n{{ else }}\n    {{ $element = partial \"utilities/URLJoin.html\" (dict \"elements\" (slice \"https://\" $host $dir $file)) }}\n{{ end }}\n\n{{ return $element }}\n"
  },
  {
    "path": "layouts/_partials/assets/adapters/imagekit.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{ $error := false }}\n\n{{ $anchorMap := dict\n    \"TopLeft\"     \"top_left\"\n    \"Top\"         \"top\"\n    \"TopRight\"    \"top_right\"\n    \"Left\"        \"left\"\n    \"Center\"      \"center\"\n    \"Right\"       \"right\"\n    \"BottomLeft\"  \"bottom_left\"\n    \"Bottom\"      \"bottom\"\n    \"BottomRight\" \"bottom_right\"\n    \"Smart\"       \"auto\"\n}}\n\n{{/* Initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"image-adapter\" \"args\" . \"group\" \"partial\") }}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\" \"assets/adapter/imagekit.html\" \n        \"warnid\"  \"warn-invalid-arguments\"\n        \"msg\"    \"Invalid arguments\"\n        \"details\" ($args.errmsg | append $args.warnmsg)\n        \"file\"    page.File\n    )}}\n    {{ $error = $args.err }}\n{{ end }}\n\n{{/* Initialize arguments */}}\n{{ $file := or $args.urlFile $args.file }}\n{{ if not $file }}\n    {{ partial \"utilities/LogErr.html\" (dict \n        \"partial\" \"assets/adapter/imagekit.html\" \n        \"msg\"     \"Invalid arguments\"\n        \"details\" slice \"argument 'url-file': expected value\"\n        \"file\"    page.File\n    )}}\n    {{ $error = true }}\n{{ end }}\n{{ $dir := or $args.urlDir $args.dir }}\n{{ $host := or $args.urlHost $args.host }}\n{{ $format := $args.format }}\n{{ $transform := $args.transform }}\n{{ $anchor := \"\" }}\n{{ with $args.anchor }}{{ $anchor = index $anchorMap . }}{{ end }}\n{{ if eq $transform \"fill\" }}{{ $transform = \"c-maintain_ratio\" }}{{ else }}{{ $transform = \"c-at_max\" }}{{ end }}\n{{ $element := \"\" }}\n{{ $height := or $args.imageHeight $args.height -}}\n{{ $width := or $args.imageWidth $args.width -}}\n\n{{/* Validate image format is supported */}}\n{{ if and $format (not (in (slice \"jpg\" \"jpeg\" \"webp\" \"avif\" \"png\") $format)) }}\n    {{ warnf \"Image format not supported by ImageKit.io: %s.%s\" (path.BaseName $file) $format }}\n    {{ $format = \"jpg\" }}\n{{ end }}\n\n{{/* Split path between end point and image path */}}\n{{ $newdir := printf \"/%s\" (index (split $dir \"/\") 1) }}\n{{ $file = partial \"utilities/URLJoin.html\" (dict \"elements\" (slice (strings.TrimPrefix $newdir $dir) $file)) }}\n{{ $dir = $newdir }}\n\n{{/* Generate image URL */}}\n{{ if not $error }}\n    {{ $operation := \"\" }}\n    {{ if $format }}\n        {{ $operation = printf \"tr:f-%s,%s,h-%d,w-%d\" $format $transform $height $width }}\n    {{ else }}\n        {{ $operation = printf \"tr:f-auto,%s,h-%d,w-%d\" $transform $height $width }}\n    {{ end }}\n    {{ with $anchor }}\n        {{ $operation = printf \"%s,fo-%s\" $operation . }}\n    {{ end }}\n    {{- $element = partial \"utilities/URLJoin.html\" (dict \"elements\" (slice \"https://\" $host $dir $operation $file)) -}}\n{{ end }}\n\n{{ return $element }}\n"
  },
  {
    "path": "layouts/_partials/assets/adapters/imgix.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{ $anchorMap := dict\n    \"TopLeft\"     \"top,left\"\n    \"Top\"         \"top\"\n    \"TopRight\"    \"top,right\"\n    \"Left\"        \"left\"\n    \"Center\"      \"center\"\n    \"Right\"       \"right\"\n    \"BottomLeft\"  \"bottom,left\"\n    \"Bottom\"      \"bottom\"\n    \"BottomRight\" \"bottom,right\"\n    \"Smart\"       \"faces,edges,center\"\n}}\n\n{{/* Initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"image-adapter\" \"args\" . \"group\" \"partial\") }}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\" \"assets/adapter/imgix.html\" \n        \"warnid\"  \"warn-invalid-arguments\"\n        \"msg\"     \"Invalid arguments\"\n        \"details\" ($args.errmsg | append $args.warnmsg)\n        \"file\"    page.File\n    )}}\n{{ end }}\n\n{{/* Initialize local arguments */}}\n{{ $file := or $args.urlFile $args.file }}\n{{ if not $file }}\n    {{ partial \"utilities/LogErr.html\" (dict \n        \"partial\" \"assets/adapter/imgix.html\" \n        \"msg\"     \"Invalid arguments\"\n        \"details\" slice \"argument 'url-file': expected value\"\n        \"file\"    page.File\n    )}}\n    {{ $error = true }}\n{{ end }}\n{{ $dir := or $args.urlDir $args.dir }}\n{{ $host := or $args.urlHost $args.host }}\n{{ $format := $args.format }}\n{{ $transform := $args.transform }}\n{{ $anchor := \"\" }}\n{{ with $args.anchor }}{{ $anchor = index $anchorMap . }}{{ end }}\n{{ if eq $transform \"fill\" }}{{ $transform = \"crop\" }}{{ else }}{{ $transform = \"max\" }}{{ end }}\n{{ $element := \"\" }}\n{{ $height := or $args.imageHeight $args.height -}}\n{{ $width := or $args.imageWidth $args.width -}}\n\n{{/* Validate image format is supported */}}\n{{ if and $format (not (in (slice \"avif\" \"gif\" \"jp2\" \"jpg\" \"json\" \"jxr\" \"pjpg\" \"mp4\" \"png\" \"png8\" \"png32\" \"webm\" \"webp\" \"blurhash\") $format)) }}\n    {{ warnf \"Image format not supported by imgix: %s.%s\" (path.BaseName $file) $format }}\n    {{ $format = \"jpg\" }}\n{{ end }}\n\n{{/* Generate image URL */}}\n{{ if not $args.err }}\n    {{ $operation := \"\" }}\n    {{ if $format }}\n        {{ $operation = printf \"fm=%s&fit=%s&h=%d&w=%d\" $format $transform $height $width }}\n    {{ else }}\n        {{ $operation = printf \"f_auto&fit=%s&h=%d&w=%d\" $transform $height $width }}\n    {{ end }}\n    {{ with $anchor }}\n        {{ $operation = printf \"%s&crop=%s\" $operation . }}\n    {{ end }}\n    {{- $url := partial \"utilities/URLJoin.html\" (dict \"elements\" (slice \"https://\" $host $dir $file)) }}\n    {{- $element = printf \"%s?%s\" $url $operation -}}\n{{ end }}\n\n{{ return $element }}\n"
  },
  {
    "path": "layouts/_partials/assets/args.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{ $error := false }}\n\n{{ define \"_partials/inline/args-table.html\"}}\n    {{ $args := .args }}\n    {{ $types := .types }}\n    {{ $page := .page }}\n    {{ $group := .group | default \"\" }}\n    {{ $parent := .parent }}\n    {{ $reflect := \"\" }}\n    \n    {{ $table := printf \"| %s | %s | %s | %s | %s |\\n| --- | --- | --- | --- | --- |\" \n        (T \"name\") (T \"type\") (T \"required\") (T \"default\") (T \"comment\") \n    }}\n\n    {{ range $key, $val := $args }}\n        {{ if eq $key \"_reflect\" }}\n            {{ $reflect = $val }}\n            {{ continue }}\n        {{ end }}\n        {{ $skip := false }}\n        {{ $groups := slice }}\n        {{ if $val }} {{ $groups = $groups | append $val.group }}{{ end }}\n        {{ if and $group $val.group }}\n            {{ $skip = not (in $groups $group )}}\n        {{ end }}\n        {{ if $parent }}{{ $skip = not (in (slice \"cascade\" \"merge\") $val.parent) }}{{ end }}\n    \n        {{ if not $skip }}\n            {{ $type := $val.type }}\n            {{ $udt := false }}\n            {{ $slice := false }}\n            {{ if reflect.IsSlice $val.type }}{{ $type = delimit $val.type \", \" }}{{ end }}\n            {{ with index $types $val.type }}\n                {{ $udt = true }}\n                {{ $slice = eq ._reflect \"[]interface {}\" }}\n            {{ end }}\n            {{ $required := \"\" }}\n            {{ if not $val.optional }}{{ $required = \"yes\" }}{{ end }}\n\n            {{ $comment := or $val.comment \"\" }}\n            {{ if $val.deprecated }}\n                {{ $btn := printf `{{< release version=\"%s\" short=\"true\" button-size=\"xs\" inline=\"true\" release-state=\"deprecated\" >}}` $val.deprecated }}\n                {{ with $val.alternative }}\n                    {{ $comment = printf \"%s **%s**. %s\" $btn (T \"alternativeFeature\" .) $comment }}\n                {{ else }}\n                    {{ $comment = printf \"%s %s\" $btn $comment }}\n                {{ end }}\n            {{ end }}\n            {{ if $val.release }}\n                {{ $comment = printf `{{< release version=\"%s\" short=\"true\" button-size=\"xs\" inline=\"true\" >}} %s` $val.release $comment }}\n            {{ end }}\n\n            {{ $min := \"\" }}\n            {{ $max := \"\" }}\n            {{ if and $val.options.values (eq $type \"select\") }}\n                {{ $comment = printf \"%s %s: [`%s`].\" $comment (T \"supportedValues\") (delimit $val.options.values \"`, `\") }}\n            {{ else if in (slice \"int\" \"float\" \"float64\") $type }}\n                {{ if eq (printf \"%T\" $val.options.min) \"int\" }}{{ $min = int $val.options.min }}{{ end }}\n                {{ if eq (printf \"%T\" $val.options.max) \"int\" }}{{ $max = int $val.options.max }}{{ end }}\n            {{ end }}\n            {{ if and (eq (printf \"%T\" $min) \"int\") (eq (printf \"%T\" $max) \"int\") }}\n                {{ $comment = printf \"%s %s: [`%d - %d`].\" $comment (T \"supportedValues\") $min $max }}\n            {{ else if (eq (printf \"%T\" $min) \"int\") }}\n                {{ $comment = printf \"%s %s: `>=%d`.\" $comment (T \"supportedValues\") $min }}\n            {{ else if (eq (printf \"%T\" $max) \"int\") }}\n                {{ $comment = printf \"%s %s: `<=%d`.\" $comment (T \"supportedValues\") $max }}\n            {{ end }}\n\n            {{ $default := \"\" }}\n            {{ with $val.default }}{{ $default = printf \"`%v`\" . }}{{ end }}\n            {{ if $udt }}{{ $type = printf \"[%s](#%s)\" $type (anchorize (printf \"%s %s\" $type (T \"type\"))) }}{{ end }}\n            {{ if $slice }}{{ $type = printf \"[]%s\" $type }}{{ end }}\n            {{ $table = printf \"%s\\n| %s | %s | %s | %s | %s |\" $table $key $type $required $default $comment }}\n        {{ end }}\n    {{ end }}\n\n    {{ return partial \"assets/table.html\" (dict \"page\" $page \"input\" $table \"wrap\" true) }}\n{{ end }}\n\n{{/* Initialize arguments */}}\n{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"args\" \"args\" . \"group\" \"partial\") -}}\n{{- if or $args.err $args.warnmsg -}}\n    {{- partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\" \"assets/args.html\" \n        \"warnid\"  \"warn-invalid-arguments\"\n        \"msg\"     \"Invalid arguments\"\n        \"details\" ($args.errmsg | append $args.warnmsg)\n        \"file\"    page.File\n    ) -}}\n    {{- $error = $args.err -}}\n{{- end -}}\n\n{{/* Initialize type structure */}}\n{{ $structure := $args.structure }}\n{{ $bookshop := \"\" }}\n{{ if hasPrefix $structure \"bookshop-\" }}{{ $bookshop = strings.TrimPrefix \"bookshop-\" $structure }}{{ $structure = \"\" }}{{ end }}\n{{ $types := dict }}\n{{ if not $error }}\n    {{ $types = partial \"utilities/InitTypes.html\" (dict \"structure\" $structure \"bookshop\" $bookshop) }}\n    {{ if or $types.err $types.warnmsg }}\n        {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n            \"partial\" \"assets/args.html\"\n            \"warnid\"  \"warn-invalid-arguments\"\n            \"msg\"     \"Invalid arguments\"\n            \"details\" ($types.errmsg | append $types.warnmsg)\n            \"file\"    page.File\n        )}}\n        {{ $error = $args.err }}\n    {{ end }}\n{{ end }}\n\n{{/* Main code */}}\n{{ if not $error }}\n    {{ $params := dict \"types\" $types.udt \"page\" $args.page \"group\" $args.group \"parent\" $args.parent }}\n    {{ if in (slice \"arguments\" \"both\") $args.renderType }}\n        {{ partial \"inline/args-table.html\" (merge $params (dict \"args\" $types.types)) }}\n    {{ end }}\n\n    {{ if in (slice \"types\" \"both\") $args.renderType }}\n        {{ $prefix := strings.Repeat $args.headerLevel \"#\" }}\n        {{ range $k, $v := $types.udt }}\n            {{ $title := $k }}\n            {{ if and site.Params.main.titleCase (not $args.page.Params.exact) }}{{ $title = title $title }}{{ end }}\n            {{ printf \"%s %s %s\" $prefix $title (T \"type\") | $args.page.RenderString }}\n            {{ partial \"inline/args-table.html\" (merge $params (dict \"args\" $v)) }}\n        {{ end }}\n    {{ end }}\n{{ end }}"
  },
  {
    "path": "layouts/_partials/assets/breadcrumb.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{ $error := false }}\n\n{{/* Limits a title to a maximum of 33 runes, adds a \"...\" suffix otherwise */}}\n{{ define \"_partials/inline/short-title.html\" }}\n    {{- $title := . -}}\n    {{ if gt (strings.RuneCount $title) 33 }}\n        {{ $title = print (substr $title 0 30) \"...\" }}\n    {{ end }}\n\n    {{ return $title }}\n{{ end }}\n\n{{/* Initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"breadcrumb\" \"args\" . \"group\" \"partial\") }}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\" \"assets/breadcrumb.html\" \n        \"warnid\"  \"warn-invalid-arguments\"\n        \"msg\"     \"Invalid arguments\"\n        \"details\" ($args.errmsg | append $args.warnmsg)\n        \"file\"    page.File\n    )}}\n    {{ $error = $args.err }}\n{{ end }}\n\n{{/* Initialize local arguments */}}\n{{- $breakpoint := $args.page.Scratch.Get \"breakpoint\" -}}\n{{- $breadcrumbBack := partial \"utilities/GetThemeIcon.html\" (dict \"id\" \"breadcrumbBack\" \"default\" \"fas angle-left\") -}}\n\n{{/* Include breadcrumb items that have both a title and address */}}\n{{ $items := slice }}\n{{- range $index, $item := $args.page.Ancestors.Reverse -}}\n    {{- $title := .LinkTitle -}}\n    {{- if .IsHome }}{{ $title = T \"home\" }}{{ end -}}\n    {{ if and site.Params.main.titleCase (not $args.page.Params.exact) }}{{ $title = title $title }}{{ end }}\n    {{- $address := or .RelPermalink .Params.Redirect -}}\n    {{ if and $title $address}}\n        {{ $items = $items | append (dict \"title\" $title \"address\" $address) }}\n    {{ end }}\n{{ end }}\n\n{{/* Main code */}}\n{{ if not $error }}\n    <nav aria-label=\"breadcrumb\" class=\"d-{{ $breakpoint.prev }}-none\">\n        <ol class=\"breadcrumb\">\n            {{- $length := len $items -}}\n            {{- if gt $length 0 -}}\n                {{ $item := index $items (sub $length 1) }}\n                <li class=\"breadcrumb-item\">\n                    <a href=\"{{ $item.address }}\">\n                        {{ partial \"assets/icon.html\" (dict \"icon\" $breadcrumbBack) }}&nbsp;{{ partial \"inline/short-title\" $item.title }}\n                    </a>\n                </li>\n            {{- end -}}\n        </ol>\n    </nav>\n\n    <nav aria-label=\"breadcrumb\" class=\"d-none d-{{ $breakpoint.prev }}-block\">\n        <ol class=\"breadcrumb\">\n            {{- $length := len $items }}\n            {{- range $index, $item := $items -}}\n                {{ $title := $item.title }}\n                {{ if and site.Params.main.titleCase (not $args.page.Params.exact) }}{{ $title = title $title }}{{ end }}\n                <li class=\"breadcrumb-item\"><a href=\"{{ $item.address }}\">{{ $title }}</a></li>\n            {{- end -}}\n            <li class=\"breadcrumb-item active\" aria-current=\"page\">\n                {{ $title := $args.page.LinkTitle }}\n                {{ if and site.Params.main.titleCase (not $args.page.Params.exact) }}{{ $title = title $title }}{{ end }}\n                {{ $title }}\n            </li>\n        </ol>\n    </nav>\n{{ end }}"
  },
  {
    "path": "layouts/_partials/assets/button.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{ $error := false }}\n\n{{/* Initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"button\" \"args\" . \"group\" \"partial\")}}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\" \"assets/button.html\" \n        \"warnid\"  \"warn-invalid-arguments\"\n        \"msg\"     \"Invalid arguments\"\n        \"details\" ($args.errmsg | append $args.warnmsg)\n        \"file\"    page.File\n    )}}\n    {{ $error = $args.err }}\n{{ end }}\n\n{{/* Initialize local arguments */}}\n{{- $title := trim $args.title \" \\r\\n\" -}}\n{{- if not (or $title $args.icon) -}}\n    {{- warnf \"partial [assets/button.html] - Missing element title or icon\" -}}\n    {{ $title = T \"linkPlaceholder\" }}\n{{- end -}}\n{{- $label := $args.label | default $title -}}\n\n{{- $tooltip := \"\" -}}\n{{ $state := or $args.buttonState $args.state }}\n{{- if not (strings.HasSuffix $state \"active\") -}}\n    {{- with $args.tooltip }}{{ $tooltip = . }}{{ end -}}\n{{- end -}}\n\n{{- $href := $args.href -}}\n{{ $linkType := or $args.linkType $args.type }}\n{{ $buttonSize := or $args.buttonSize $args.size }}\n{{ $toastID := or $args.toastId $args.toast }}\n{{ $collapseID := or $args.collapseId $args.collapse }}\n{{- if not (strings.HasSuffix $state \"active\") -}}\n    {{- with $collapseID }}{{ $href = printf \"#%s\" . }}{{ end -}}\n{{ else }}\n    {{- $collapseID = \"\" -}}\n{{- end -}}\n\n{{- if and $tooltip $collapseID -}}\n    {{- errorf \"partial [assets/button.html] - Cannot use tooltip and collapse at the same time\" -}}\n    {{ $error = true }}\n{{- end -}}\n{{- $class := $args.class | default \"\" }}\n{{ with $args.badge }}{{ $class = printf \"%s me-3\" $class }}{{ end }}\n{{- $cue := $args.cue | default site.Params.main.externalLinks.cue -}}\n{{- $tab := $args.tab | default site.Params.main.externalLinks.tab -}}\n{{- $externalLink := partial \"utilities/GetThemeIcon.html\" (dict \"id\" \"externalLink\" \"default\" \"fas up-right-from-square\") -}}\n\n{{- $isExternal := false }}\n{{ if in (slice \"http\" \"https\") ((urls.Parse (absURL $href)).Scheme) }}\n    {{ $isExternal = ne (urls.Parse (absURL $href)).Host (urls.Parse site.BaseURL).Host -}}\n{{ end }}\n{{- $target := \"\" -}}\n{{- $rel := \"\" -}}\n\n{{- if $isExternal -}}\n    {{- if $tab -}}\n        {{- $target = \"_blank\" -}}\n        {{- $rel = \"noopener noreferrer nofollow\" -}}\n    {{- end -}}\n\n    {{- if and $title $cue -}}\n        {{ $suffix := partial \"assets/icon.html\" (dict \"icon\" $externalLink \"class\" \"fa-2xs\") }}\n        {{- $title = printf \"%s&nbsp;%s\" $title $suffix | safeHTML -}}\n    {{- end -}}\n{{- end -}}\n\n{{/* Main code */}}\n{{ if not $error }}\n    {{- $btnClass := \"\" -}}\n    {{- if eq $linkType \"button\" }}\n        {{- $btnClass = printf \"btn btn-%s%s\" (cond $args.outline \"outline-\" \"\") $args.color -}}\n        {{- if ne $buttonSize \"md\" }}{{ $btnClass = printf \"%s btn-%s\" $btnClass $buttonSize }}{{ end -}}\n        {{- if in (slice \"disabled\" \"active\") $state }}{{ $btnClass = printf \"%s %s\" $btnClass $state }}{{ end -}}\n        {{- $btnClass = printf \"%s position-relative %s\" $btnClass $class }}\n    {{- end -}}        \n\n    <a aria-label=\"{{ (or $label $title) | safeHTML }}\"\n        {{ if ne $state \"disabled\" }}{{ with $href }}href=\"{{ . }}\"{{ end }}{{ end -}}\n        {{- with $args.id }} id=\"{{ . }}\"{{ end -}}\n        {{- with $target }} target=\"{{ . }}\"{{ end }}{{ with $rel }} rel=\"{{ . }}\"{{ end -}}\n        {{- with $toastID }} data-toast-target=\"{{ . }}\"{{ end -}}\n        {{- with $args.clipboard }} data-clipboard=\"{{ . }}\"{{ end -}}\n        {{- with $btnClass }} class=\"{{ . }}\"\n        {{ if eq $state \"disabled\" }}aria-disabled=\"true\"{{ end -}}\n        {{- else }} class=\"btn btn-link link-{{ $args.color }} position-relative {{ $class }}\"{{ end -}}\n        {{- with $tooltip }} data-bs-toggle=\"tooltip\" data-bs-title=\"{{ . }}\" data-bs-placement=\"{{ $args.placement }}\"{{ end -}}\n        {{- with $collapseID }} data-bs-toggle=\"collapse\" aria-expanded=\"false\" aria-controls=\"{{ . }}\"{{ end -}}\n        {{- if eq $state \"active\" }} data-bs-toggle=\"button\" aria-pressed=\"true\"{{ end -}}\n        {{- if eq $state \"inactive\" }} data-bs-toggle=\"button\" aria-pressed=\"false\"{{ end -}}\n        {{- range $key, $val := $args.attributes -}}\n            {{ printf \" %s=\\\"%s\\\"\" $key $val | safeHTMLAttr }}\n        {{- end -}}\n        role=\"button\"\n        >\n        <span class=\"d-flex justify-content-{{ $args.justify }}\">\n            <span class=\"my-auto\">{{ $title | safeHTML }}</span>\n            {{- with $args.icon }}\n                <span class=\"align-self-center{{ if $title }}{{ if eq $args.order \"first\" }} order-first pe-1{{ else }} ps-1{{ end }}{{ end }}\">\n                    {{ partial \"assets/icon.html\" (dict \"icon\" $args.icon \"class\" ($args.iconClass | default \"\") \"spacing\" false) }}\n                </span>\n            {{ end }}\n        </span>\n\n        {{- with $args.badge }}\n            <span class=\"position-absolute top-0 start-100 translate-middle badge rounded-pill bg-danger\">\n                {{ . }}\n                {{ with $label }}<span class=\"visually-hidden\">{{ . }}</span>{{ end }}\n            </span>\n        {{- end -}}  \n    </a>{{ if $args.spacing }}&nbsp;{{- end }}\n{{ end }}"
  },
  {
    "path": "layouts/_partials/assets/card-group.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{- $error := false -}}\n\n{{/* Define inline partials */}}\n{{- define \"_partials/inline/style.html\" -}}\n\t{{- $style := \"\" -}}\n    {{- if gt (len .styles) 0 -}}\n        {{- $def := index .styles (mod .index (len .styles)) -}}\n        {{- $style = index $def .key -}}\n    {{- end -}}\n    {{- return ($style | default .default ) -}}\n{{- end -}}\n\n{{/* Initialize arguments */}}\n{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"card-group\" \"child\" \"card\" \"args\" . \"group\" \"partial\") -}}\n{{- if or $args.err $args.warnmsg -}}\n    {{- partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\" \"assets/card-group.html\" \n        \"warnid\"  \"warn-invalid-arguments\"\n        \"msg\"     \"Invalid arguments\"\n        \"details\" ($args.errmsg | append $args.warnmsg)\n        \"file\"    page.File\n    )}}\n    {{- $error = $args.err -}}\n{{- end -}}\n\n{{/* Initialize global variables */}}\n{{- $breakpoint := partial \"utilities/GetBreakpoint.html\" -}}\n{{- $padding := partial \"utilities/GetPadding.html\" -}}\n{{- $pretty := site.Params.main.internalLinks.pretty | default false -}}\n\n{{/* Initialize local variables */}}\n{{- $list := $args.list -}}\n{{- $class := $args.class -}}\n{{- $orientation := $args.orientation -}}\n{{- $cardWrapper := \"\" -}}\n\n{{- $breakpoint := partial \"utilities/GetBreakpoint.html\" -}}\n{{- $colsMap := dict\n    \"auto\" \"\"\n    \"1\" \"row-cols-1\"\n    \"2\" (printf \"row-cols-1 row-cols-%s-1 row-cols-%s-2\" $breakpoint.prev $breakpoint.current)\n    \"3\" (printf \"row-cols-1 row-cols-%s-2 row-cols-%s-3\" $breakpoint.prev $breakpoint.current)\n    \"4\" (printf \"row-cols-1 row-cols-%s-2 row-cols-%s-4\" $breakpoint.prev $breakpoint.current)\n    \"5\" (printf \"row-cols-1 row-cols-%s-3 row-cols-%s-5\" $breakpoint.prev $breakpoint.current)\n}}\n{{- $sizesMap := dict\n    \"auto\" \"100vw\"\n    \"1\" \"100vw\"\n    \"2\" (printf \"(min-width: %s) 50vw, 100vw\" $breakpoint.currentSize)\n    \"3\" (printf \"(min-width: %s) 33.3vw, (min-width: %s) 50vw, 100vw\" $breakpoint.currentSize $breakpoint.prevSize)\n    \"4\" (printf \"(min-width: %s) 25vw, (min-width: %s) 50vw, 100vw\" $breakpoint.currentSize $breakpoint.prevSize)\n    \"5\" (printf \"(min-width: %s) 20vw, (min-width: %s) 33.3vw, 100vw\" $breakpoint.currentSize $breakpoint.prevSize)\n}}\n\n{{- if not $args.responsive -}}\n    {{- $colsMap = dict  \"auto\" \"\" \"1\" \"row-cols-1\" \"2\" \"row-cols-2\" \"3\" \"row-cols-3\" \"4\" \"row-cols-4\" \"5\" \"row-cols-5\" -}}\n    {{- $sizesMap = dict \"auto\" \"100vw\" \"1\" \"100vw\" \"2\" \"50vw\" \"3\" \"33.3vw\" \"4\" \"25vw\" \"5\" \"20vw\" -}}\n{{- end -}}\n\n{{/* Apply optional pagination */}}\n{{- $isPages := in (slice \"page.Pages\" \"resource.Resources\") (printf \"%T\" $list) -}}\n{{- $paginator := \"\" -}}\n{{- if and $isPages $args.paginate -}}\n    {{- with $args.pagination -}}\n        {{- $paginator = $args.page.Paginate $list . -}}\n    {{- else -}}\n        {{- $paginator = $args.page.Paginate $list -}}\n    {{- end -}}\n    {{- $list = first $paginator.PagerSize (after (mul (sub $paginator.PageNumber 1) $paginator.PagerSize) $list) -}}\n\n    {{- page.Store.Set \"paginator\" $paginator -}}\n{{- end -}}\n\n{{/* Initialize list elements */}}\n{{- $elements := slice -}}\n{{- if $isPages -}}\n    {{- range $index, $element := $list -}}\n        {{- $params := dict -}}\n        {{/* regular page */}}\n        {{- if and $element.RelPermalink $element.File -}}\n            {{- $params = merge $params (dict \"path\" $element.Path \"exact\" $element.Params.exact) -}}\n        {{/* headless page */}}\n        {{- else -}}\n            {{- $thumbnail := \"\" -}}\n            {{- $mode := false -}}\n            {{- $anchor := \"\" -}}\n            {{- if reflect.IsMap $element.Params.Thumbnail }}\n                {{- $thumbnail = $element.Params.Thumbnail.url -}}\n                {{- $mode = $element.Params.Thumbnail.mode -}}\n                {{- $anchor = $element.Params.Thumbnail.anchor -}}\n            {{ else }}\n                {{ $thumbnail = $element.Params.Thumbnail }}\n            {{ end -}}\n            {{- $params = merge $params (dict\n                \"title\"       $element.Title\n                \"href\"        $element.RelPermalink\n                \"description\" (partial \"utilities/GetDescription.html\" (dict \"page\" $element \"raw\" true))\n                \"thumbnail\"   $thumbnail\n                \"mode\"        $mode\n                \"anchor\"      $anchor\n                \"icon\"        $element.Params.icon\n            ) -}}\n        {{- end -}}\n\n        {{- $elements = $elements | append $params -}}\n    {{- end -}}\n{{- else if $list -}}\n    {{- $elements = $elements | append $list -}}\n{{- end -}}\n\n{{/* Limit list to max elements */}}\n{{- $count := len $elements -}}\n{{- $max := $count -}}\n{{- $max = math.Min ((or $args.limit $args.max) | default $count) $count -}}\n{{- if not $args.paginate -}}\n    {{- $elements = first $max $elements -}}\n{{- end -}}\n\n{{/* Initialize grid and layout */}}\n{{- $sizes := \"100vw\" -}}\n{{- $colGrid := \"\" -}}\n{{- if not $args.scroll -}}\n    {{- $colGrid = index $colsMap (string $args.cols) -}}\n    {{- $sizes = index $sizesMap (string $args.cols) -}}\n{{- else -}}\n    {{- if in (slice \"2\" \"3\" \"4\" \"5\") $args.cols -}}\n        {{- $sizes = replace (printf \"%.1fvw\" (div 100.0 (int $args.cols))) \".0\" \"\" -}}\n    {{- end -}}\n{{- end -}}\n\n{{- if and (eq $args.cols \"1\") (eq $orientation \"horizontal\") }}{{ $orientation = \"horizontal-sm\" }}{{ end -}}\n\n{{- if not $args.spacer -}}\n    {{- $class = trim (printf \"%s h-100\" (or $class \"\")) \" \" -}}\n{{- end -}}\n\n{{/* Main code */}}\n{{- if and (not $error) (or (gt (len $elements) 0) $args.cards) -}}\n    <div class=\"container-fluid {{ if $args.scroll }}card-container-wrapper{{ end }} p-0 {{ $args.wrapper }}\">\n        <div class=\"row{{ with $args.gutter }} g-{{ . }}{{ end }}\n        {{- if $args.scroll }} d-flex flex-row flex-nowrap card-container scrollbar-horizontal pb-4 w-100 {{ end -}}\n        {{- if $args.bento }}{{ with $args.valign }} align-items-{{ . }}{{ end }}{{ else }} {{ $colGrid }}{{ end }}\">\n            {{- range $index, $element := $elements -}}\n                {{- $params := (dict\n                    \"class\"         $class\n                    \"color\"         $args.color\n                    \"header-style\"  (or $args.headerStyle $args.header)\n                    \"body-style\"    (or $args.bodyStyle $args.body)\n                    \"footer-style\"  (or $args.footerStyle $args.footer)\n                    \"loading\"       $args.loading\n                    \"sizes\"         $sizes\n                    \"orientation\"   (partial \"inline/style.html\" (dict \"styles\" $args.styles \"index\" $index \"key\" \"orientation\" \"default\" $orientation))\n                    \"padding\"       $args.padding\n                    \"ratio\"         (partial \"inline/style.html\" (dict \"styles\" $args.styles \"index\" $index \"key\" \"ratio\" \"default\" $args.ratio))\n                    \"portrait\"      (partial \"inline/style.html\" (dict \"styles\" $args.styles \"index\" $index \"key\" \"portrait\" \"default\" $args.portrait))\n                    \"subtle\"        $args.subtle\n                    \"icon-style\"    (or (index $element \"icon-style\") $element.style $args.iconStyle)\n                    \"align\"         $args.align\n                    \"href\"          $element.href\n                    \"button\"        (cond (isset $args \"button\") $args.button $element.button)\n                    \"button-label\"  (or (index $element \"button-label\") $element.buttonLabel)\n                    \"link-type\"     (or $args.linkType $args.buttonType)\n                    \"icon-rounded\"  $args.iconRounded\n                ) -}}\n                {{- $params = merge $element $params -}}\n                {{- if $args.scroll -}}\n                    {{- $width := (partial \"inline/style.html\" (dict \"styles\" $args.styles \"index\" $index \"key\" \"width\" \"default\" \"3\")) -}}\n                    {{- $size := $args.cols -}}\n                    {{- if and (gt $args.cols 1) (eq $width \"6\") }}{{ $size = sub (int $args.cols) 1 }}{{ end -}}\n                    {{- $cardWrapper = printf \"card-block card-block-%d\" (int $size) -}}\n                {{- end -}}\n\n                {{/* add col-$width */}}\n                <div class=\"{{ with $cardWrapper }}{{ . }}{{ else }}col{{ end }}\">\n                    {{- if $args.spacer -}}<div class=\"spacer\"></div>{{ end -}}\n                    {{- partial $args.hook $params -}}\n                </div>\n                {{- if and (lt $index (sub $max 1)) $args.separator -}}\n                    <div class=\"col d-block d-sm-none\">\n                        <hr>\n                    </div>\n                {{- end -}}\n            {{- end -}}\n            {{- if $args.cards }}{{ print $args.cards | safeHTML }}{{ end -}}\n        </div>\n    </div>\n\n    {{- if $paginator -}}\n        {{- if gt $paginator.TotalPages 1 -}}\n            <div class=\"pt-{{ $padding.y }}\">{{- partial \"assets/pagination.html\" (dict \"page\" $args.page \"format\" \"terse\") -}}</div>\n        {{- end -}}\n    {{- else -}}\n        {{- if or (and (gt $count $max) $args.hrefTitle) (and $args.hrefForce $args.hrefTitle) -}}\n            {{- $href := $args.href -}}\n            {{- if and $pretty (not (hasSuffix $href \"/\" )) (not (strings.Contains $href \"#\")) -}}\n                {{- $href = printf \"%s/\" $href -}}\n            {{- end -}}\n            <div class=\"mt-{{ $padding.y }} w-100 align-self-start\">\n                {{ partial \"assets/button.html\" (dict \n                    \"href\"      $href\n                    \"title\"     $args.hrefTitle\n                    \"color\"     \"primary\"\n                    \"outline\"   true\n                    \"link-type\" $args.moreLinkType\n                    \"icon\"      $args.moreLinkIcon\n                ) }}\n            </div>\n        {{- end -}}\n    {{- end -}}\n{{- end -}}"
  },
  {
    "path": "layouts/_partials/assets/card-icon.html",
    "content": "{{/* \n    Copyright © 2025 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{ $error := false }}\n\n{{/* Initialize local arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"card-icon\" \"args\" . \"group\" \"partial\") }}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\" \"assets/card-icon.html\" \n        \"warnid\"  \"warn-invalid-arguments\"\n        \"msg\"     \"Invalid arguments\"\n        \"details\" ($args.errmsg | append $args.warnmsg)\n        \"file\"    page.File\n    )}}\n    {{ $error = $args.err }}\n{{ end }}\n\n{{ if (not $args.error) }}\n    <div class=\"card-icon\n    {{ with $args.padding }} p-{{ . }}{{ end }}\n    {{ if $args.iconRounded }} fa-stack {{ $args.iconStyle }} fa-fw{{ end }}\n    {{ $args.class }}\"\n    >\n        {{ if $args.iconRounded }}\n            {{- partial \"assets/icon.html\" (dict \"icon\" \"fas circle\" \"class\" \"fa-stack-2x\" \"spacing\" false) -}}\n            {{- partial \"assets/icon.html\" (dict \"icon\" $args.icon \"class\" \"fa-stack-1x fa-inverse\" \"spacing\" false) -}}\n        {{ else }}\n            {{- partial \"assets/icon.html\" (dict \"icon\" $args.icon \"class\" (trim (printf \"%s fa-fw\" $args.iconStyle) \" \") \"spacing\" false) -}}\n        {{ end }}\n    </div>\n{{ end }}"
  },
  {
    "path": "layouts/_partials/assets/card.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{ $error := false }}\n\n{{- define \"_partials/inline/card-icons.html\" -}}\n    {{ $links := .links }}\n    \n    <span class=\"text-body-secondary\">\n        {{- range $index, $item := $links -}}\n            {{ partial \"assets/button.html\" (dict \n                \"href\"       $item.url\n                \"icon\"       ($item.icon | default \"\")\n                \"icon-class\" \"fa-fw\"\n                \"class\"      \"btn-social p-0\"\n                \"label\"      $item.title\n                \"spacing\"    false\n            ) }}\n        {{- end -}}\n    </span>\n{{- end -}}\n\n{{/* Inline partial to render the card's body */}}\n{{- define \"_partials/inline/card-body.html\" -}}\n    {{- $title := .title -}}\n    {{- $href := .href -}}\n    {{- $color := .color -}}\n    {{- $description := .description -}}\n    {{- $links := .links -}}\n    {{- $class := .class }}\n    {{- $fs := .fs | default \"fs-lg-5 fs-6\" }}\n    {{- $linkIcon := .linkIcon -}}\n\n    {{- if $href -}}\n        <a href=\"{{ $href }}\" class=\"{{ if $color }}link-bg-{{ $color }}{{ else }}card-body-link{{ end }} stretched-link {{ $class }}\">\n            {{ if or $title $links }}\n                <p class=\"card-title {{ $fs }}\">\n                    {{- with $title }}{{ . | page.RenderString }}{{ end }}\n                    {{ with $links }}{{ partial \"inline/card-icons.html\" (dict \"links\" .) }}{{ end -}}\n                    {{- with $linkIcon -}}<span class=\"card-link-icon\">{{- partial \"assets/icon.html\" (dict \"icon\" . \"spacing\" false) -}}</span>{{- end -}}\n                </p>\n            {{ end -}}\n            {{ with $description }}\n                <div class=\"card-text {{ if $color }}link-bg-{{ $color }}{{ else }}card-body-link{{ end }}\">\n                {{ . | safeHTML }}\n                </div>\n            {{ end -}}\n        </a>\n    {{- else -}}\n        <div{{ with $class }} class=\"{{ . }}\"{{ end }}>\n            {{ if or $title $links }}\n                <p class=\"card-title {{ $fs }}\">\n                    {{- with $title }}{{ . | page.RenderString }}{{ end }}\n                    {{ with $links }}{{ partial \"inline/card-icons.html\" (dict \"links\" .) }}{{ end -}}\n                </p>\n            {{ end -}}\n            {{ with $description }}<div class=\"card-text\">{{ . | safeHTML }}</div>{{ end -}}\n        </div>\n    {{- end -}}\n{{- end -}}\n\n{{/* Inline partial to render the card's header or footer */}}\n{{- define \"_partials/inline/card-caption.html\" -}}\n    {{- $page := .page -}}\n    {{- $keywords := .keywords -}}\n    {{- $color := .color -}}\n    {{- $maxTags := 0 -}}\n    {{- $caption := \"\" -}}\n\n    {{- if eq $keywords \"full\" }}{{ $maxTags = 1 -}}\n    {{- else if eq $keywords \"tags\" }}{{ $maxTags = 3 }}{{ end -}}\n\n    {{ if ne $keywords \"none\" }}\n        <p class=\"card-text\"><small class=\"{{ if $color }}link-bg-{{ $color }}{{ else }}card-body-link{{ end }} text-uppercase\">\n            {{- if in (slice \"full\" \"publication\") $keywords -}}\n                {{ with $page.Date }}{{ partial \"utilities/date.html\" (dict \"date\" . \"format\" \"long\") }}&nbsp;&bull;&nbsp;{{ end -}}\n                {{ (math.Max $page.ReadingTime 1) | lang.FormatNumber 0 }} {{ i18n \"minutesShort\" }} {{ i18n \"read\" -}}\n            {{- end -}}\n\n            {{- if eq $keywords \"full\" -}}\n                {{ if gt (len ($page.GetTerms \"tags\")) 0 }}&nbsp;&bull;&nbsp;{{ end -}}\n            {{- end -}}\n\n            {{- $link := \"text-decoration-none link-primary\" -}}\n            {{- if $color }}{{ $link = printf \"link-bg-%s\" $color }}{{ end -}}\n\n            {{- range $index, $tag := first $maxTags ($page.GetTerms \"tags\") -}}\n                {{- if gt $index 0 }}&nbsp;&bull;&nbsp;{{ end -}}\n                <a href=\"{{ $tag.Page.RelPermalink }}\" class=\"{{ $link }} tag-link\" aria-label=\"tag: {{ $tag.LinkTitle }}\">{{ $tag.LinkTitle }}</a>\n            {{- end -}}\n        </small></p>\n    {{ end }}\n{{- end -}}\n\n{{/* Initialize global variables */}}\n{{- $padding := partial \"utilities/GetPadding.html\" -}}\n{{- $cardReadMore := partial \"utilities/GetThemeIcon.html\" (dict \"id\" \"cardReadMore\" \"default\" \"fas chevron-right\") -}}\n{{- $cardLinkIcon := partial \"utilities/GetThemeIcon.html\" (dict \"id\" \"cardLinkIcon\" \"default\" \"fas arrow-right\") -}}\n\n{{/* Initialize local arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"card\" \"args\" . \"group\" \"partial\") }}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\" \"assets/card.html\" \n        \"warnid\"  \"warn-invalid-arguments\"\n        \"msg\"     \"Invalid arguments\"\n        \"details\" ($args.errmsg | append $args.warnmsg)\n        \"file\"    page.File\n    )}}\n    {{ $error = $args.err }}\n{{ end }}\n\n{{/* Initialize arguments and default values */}}\n{{- $colorStyle := \"\" -}}\n{{ if $args.color }}\n    {{ if $args.subtle }}\n        {{- $colorStyle = printf \"bg-%s-subtle text-%s-emphasis\" $args.color $args.color -}}\n    {{ else }}\n        {{- $colorStyle = printf \"bg-%s text-bg-%s\" $args.color $args.color -}}\n    {{ end }}\n{{ end }}\n\n{{/* Override arguments */}}\n{{- $page := \"\" }}\n{{- if $args.path }}\n    {{ $page = partial \"utilities/GetPage.html\" (dict \"url\" $args.path \"page\" (or $args.page page)) }}\n    {{ $validate := site.Params.main.internalLinks.validate | default true }}\n    {{- if and $validate (not $page) }}\n        {{ if page.File }}\n            {{- warnf \"partial [assets/card.html] - Cannot find target page '%s', see '%s'\" $args.path page.File.Path -}}\n        {{ else }}\n            {{- warnf \"partial [assets/card.html] - Cannot find target page '%s'\" $args.path -}}\n        {{ end }}\n    {{- end }}\n{{- end }}\n\n{{- $title := $args.title -}}\n{{- $href := $args.href -}}\n{{- $description := $args.description -}}\n{{- $thumbnail := $args.thumbnail -}}\n{{- $mode := $args.mode -}}\n{{- $anchor := $args.anchor -}}\n{{- $ratio := $args.ratio -}}\n{{- $icon := $args.icon -}}\n{{- $iconStyle := \"\" -}}\n\n{{- with $page -}}\n    {{- if not $args.title }}{{ $title = .Title }}{{ end -}}\n    {{- if not $args.href }}{{ $href = .RelPermalink  }}{{ end -}}\n    {{- if not $args.description }}{{ $description = partial \"utilities/GetDescription.html\" (dict \"page\" .) }}{{ end -}}\n    {{- if and (not $args.thumbnail) (not $args.icon) }}\n        {{ if reflect.IsMap .Params.Thumbnail }}{{ $thumbnail = .Params.Thumbnail.url }}{{ else }}{{ $thumbnail = .Params.Thumbnail }}{{ end }}\n    {{ end -}}\n    {{ if not $args.ratio }}\n        {{- if and (reflect.IsMap .Params.Thumbnail) .Params.Thumbnail.ratio }}{{ $ratio = .Params.Thumbnail.ratio }}{{ end -}}\n    {{ end }}\n    {{- if not $args.icon }}{{ $icon = .Params.icon }}{{ end -}}\n    {{- if not $args.anchor }}{{ $anchor = (or (and (reflect.IsMap .Params.Thumbnail) .Params.Thumbnail.anchor) \"\") }}{{ end -}}\n    {{- if not $args.mode }}{{ $mode = (or (and (reflect.IsMap .Params.Thumbnail) .Params.Thumbnail.mode) false) }}{{ end -}}\n{{- end -}}\n\n{{- $style := $args.iconStyle }}\n{{ if (hasPrefix $args.orientation \"horizontal\") }}\n    {{ if not $args.iconStyle }}{{ $style = \"fa-fluid fa-fw\" }}{{ end }}\n{{ else }}\n    {{ if not $args.iconStyle }}{{ $style = \"fa-4x\" }}{{ end }}\n    {{- $iconStyle = \"pb-3\" -}}\n{{ end }}\n\n{{ $minimal := or (eq $args.bodyStyle \"minimal\") (eq $args.body \"minimal\") }}\n{{- if eq $args.orientation \"none\" }}{{ $thumbnail = \"\" }}{{ $icon = \"\" }}{{ end -}}\n{{- if or (eq $args.bodyStyle \"title\") (eq $args.body \"title\") }}{{ $description = \"\" }}{{ end -}}\n{{- if $minimal }}{{ $description = \"\" }}{{ $thumbnail = \"\" }}{{ $icon = \"\" }}{{ end -}}\n{{- if or (eq $args.bodyStyle \"none\") (eq $args.body \"none\") }}{{ $title = \"\" }}{{ $description = \"\" }}{{ end -}}\n{{ if and site.Params.main.titleCase (not $args.exact) }}{{ $title = title $title }}{{ end }}\n\n{{/* Show hover link icon when enabled (global setting or per-card/group override) and card is a bare link */}}\n{{- $linkIconEnabled := or (site.Params.main.cards.linkIcon | default false) $args.linkIcon -}}\n{{- $linkIcon := cond (and $linkIconEnabled $href (not $args.button) (not $args.buttonLabel)) $cardLinkIcon \"\" -}}\n\n{{- $thumbnailArgs := dict\n    \"src\"      $thumbnail\n    \"portrait\" $args.portrait\n    \"anchor\"   $anchor\n    \"mode\"     $mode\n    \"sizes\"    $args.sizes\n    \"title\"    (or $args.alt $title)\n    \"loading\"  $args.loading\n-}}\n\n{{/* Main code */}}\n{{ if or (gt $args.gutter \"0\") ($args.wrapper) }}<div class=\"{{ with $args.gutter }}g-{{ . }}{{ end }} {{ $args.wrapper }}\">{{ end }}\n{{ $imgOnly := and (eq $args.headerStyle \"none\") (eq $args.bodyStyle \"none\") (eq $args.footerStyle \"none\") }}\n\n{{- if and (hasPrefix $args.orientation \"horizontal\") (not $imgOnly) -}}\n    {{ $col1 := \"\" }}\n    {{ $col2 := \"\" }}\n\n    {{ if $thumbnail }}\n        {{ if eq $args.orientation \"horizontal-sm\" }}\n            {{ $col1 = \"col-4 col-md-2 pe-0\" }}\n            {{ $col2 = \"col-8 col-md-10\" }}\n        {{ else }}\n            {{ $col1 = \"col-4 pe-0\" }}\n            {{ $col2 = \"col-8\" }}\n        {{ end }}\n    {{ end }}\n\n    {{/* Render horizontal card */}}\n    <div class=\"card {{ $colorStyle }}{{ $args.class }}\">\n        <div class=\"{{ if $thumbnail }}row-cols-2 row {{ end }} g-0 h-100{{ if $args.button }} pb-{{ $padding.y }}{{ end }}\">\n            {{- if $thumbnail -}}\n                <div class=\"{{ $col1 }}\">\n                    {{ $fullHeight := \"card-img-h100\" }}\n                    {{ $rounding := \"rounded-start\" }}\n                    {{ if eq (lower (path.Ext $thumbnail)) \".svg\" }}{{ $fullHeight = \"\" }}{{ $rounding = \"\" }}{{ end }}\n                    {{- partial $args.hook (merge $thumbnailArgs (dict \n                        \"wrapper\"  \"card-img-wrap h-100 d-flex align-items-center\"\n                        \"class\"    (printf \"card-img-bg %s %s\" $rounding $fullHeight)\n                        \"ratio\"    (or $ratio \"auto\")\n                    )) -}}\n                </div>\n            {{- end -}}\n            <div class=\"{{ $col2 }}\">\n                {{ $padding := printf \"p-%d\" $args.padding }}\n                <div class=\"card-body {{ $padding }} h-100 hstack\">\n                    {{ if $icon }}\n                        {{- partial \"assets/card-icon.html\" (dict\n                            \"icon\"         $icon\n                            \"padding\"      0\n                            \"icon-rounded\" $args.iconRounded\n                            \"icon-style\"   $style\n                            \"class\"        (printf \"align-self-%s me-3 mt-1 col-auto\" $args.align)\n                        )}}\n                    {{ end }}\n                    <div>\n                        {{ if and $page (ne $args.headerStyle \"none\") }}\n                            <div>{{ partial \"inline/card-caption.html\" (dict\n                                \"page\"     $page\n                                \"keywords\" $args.headerStyle\n                                \"color\"    $args.color\n                                ) }}\n                            </div>\n                        {{ end }}\n                        {{- partial \"inline/card-body.html\" (dict\n                            \"title\"       (cond $minimal \"\" $title)\n                            \"href\"        $href\n                            \"color\"       $args.color\n                            \"description\" (cond $minimal $title $description)\n                            \"links\"       $args.links\n                            \"linkIcon\"    $linkIcon\n                        ) -}}\n                        {{ if and $page (ne $args.footerStyle \"none\") }}\n                            <div>{{ partial \"inline/card-caption.html\" (dict\n                                \"page\"     $page\n                                \"keywords\" $args.footerStyle\n                                \"color\"    $args.color)\n                            }}\n                            </div>\n                        {{ end }}\n\n                        {{ if and $href $args.button }}\n                            {{ $label := (or $args.buttonLabel $title) | default (T \"readMore\") }}\n                            {{ $buttonClass := \"card-button mb-n4\" }}\n                            {{ $buttonType := (or $args.linkType $args.buttonType) }}\n                            {{ if eq $buttonType \"link\" }}{{ $buttonClass = \"card-button card-button-link mb-n4\" }}{{ end }}\n                            <div class=\"d-flex align-items-end\">\n                                {{ partial \"assets/button.html\" (dict \n                                    \"title\"       $label\n                                    \"icon\"        $cardReadMore\n                                    \"href\"        $href\n                                    \"outline\"     true\n                                    \"button-size\" \"sm\"\n                                    \"class\"       $buttonClass\n                                    \"link-type\"   $buttonType\n                                )}}\n                            </div>\n                        {{ end }}\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n{{- else -}}\n    {{/* Render stacked / default card */}}\n    {{ $overlay := eq $args.orientation \"overlay\" }}\n    <div class=\"card {{ $colorStyle }} {{ $args.class }} text-{{ $args.align }}{{ if not $thumbnail }} p-{{ $args.padding }}{{ end }}\">\n        {{- if $thumbnail -}}\n            {{- partial $args.hook (merge $thumbnailArgs (dict\n                \"wrapper\"  \"card-img-wrap\"\n                \"class\"    (cond $imgOnly \"card-img-bg\" \"card-img-top card-img-bg\")\n                \"ratio\"    (or $ratio \"16x9\")\n            )) -}}\n        {{- else if $icon -}}\n            {{- partial \"assets/card-icon.html\" (dict\n                \"icon\"         $icon\n                \"padding\"      0\n                \"icon-rounded\" $args.iconRounded\n                \"icon-style\"   $style\n                \"class\"        (printf \"mb-3 m-0 text-%s\" $args.align)\n            )}}\n        {{- end -}}\n        <div class=\"card-body p-0 d-flex flex-column{{ if $thumbnail }} p-{{ $args.padding }}{{ end }}\n            {{- if $imgOnly }} card-img-overlay {{ else if $overlay }} card-img-overlay card-overlay-gradient p-4 {{ end }}\"\n            {{- if $overlay }}data-bs-theme=\"dark\"{{ end }}>\n            {{ if $page }}{{- partial \"inline/card-caption.html\" (dict \"page\" $page \"keywords\" $args.headerStyle \"color\" $args.color) -}}{{ end }}\n            {{- partial \"inline/card-body.html\" (dict\n                \"title\"       (cond $minimal \"\" $title)\n                \"href\"        $href\n                \"color\"       $args.color\n                \"description\" (cond $minimal $title $description)\n                \"links\"       $args.links\n                \"class\"       (cond (and $thumbnail (eq $args.headerStyle \"none\")) \"pt-3\" \"\")\n                \"linkIcon\"    $linkIcon\n            ) -}}\n            {{ if $page }}{{- partial \"inline/card-caption.html\" (dict \"page\" $page \"keywords\" $args.footerStyle \"color\" $args.color) -}}{{ end }}\n        </div>\n\n        {{ if or $args.buttonLabel $args.button }}\n            {{ $label := (or $args.buttonLabel $title) | default (T \"readMore\") }}\n            <div class=\"row\" >\n                <div class=\"{{ if eq $args.orientation \"horizontal-sm\" }}col-4 col-md-2{{ else if eq $args.orientation \"horizontal\" }}col-4{{ end }}\"></div>\n                <div class=\"col d-flex align-items-end pt-{{ $args.padding }}\">\n                    {{ $buttonClass := \"card-button\" }}\n                    {{ $buttonType := (or $args.linkType $args.buttonType) }}\n                    {{ if eq $buttonType \"link\" }}{{ $buttonClass = \"card-button card-button-link\" }}{{ end }}\n                    {{ if ne $args.align \"start\" }}{{ $buttonClass = printf \"%s m%s-auto\" $buttonClass (cond (eq $args.align \"center\") \"x\" \"s\") }}{{ end }}\n                    {{ partial \"assets/button.html\" (dict \n                        \"title\"       $label\n                        \"href\"        $href\n                        \"outline\"     true\n                        \"button-size\" \"sm\"\n                        \"class\"       \"card-button\"\n                        \"class\"       $buttonClass\n                        \"link-type\"   $buttonType\n                    )}}\n                </div>\n            </div>\n        {{ end }}\n    </div>\n{{- end -}}\n\n{{ if or (gt $args.gutter \"0\") ($args.wrapper) }}</div>{{ end }}\n"
  },
  {
    "path": "layouts/_partials/assets/carousel-item.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{/* Initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"carousel-item\" \"args\" . \"group\" \"partial\") }}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\" \"assets/carousel-item.html\" \n        \"warnid\"  \"warn-invalid-arguments\"\n        \"msg\"     \"Invalid arguments\"\n        \"details\" ($args.errmsg | append $args.warnmsg)\n        \"file\"    page.File\n    )}}\n{{ end }}\n\n{{/* Main code */}}\n{{ if not $args.err }}\n    <div class=\"carousel-item{{ if $args.active }} active{{ end }}\" {{ if not $args.active }} fetchpriority=\"low\"{{ end }}>\n        {{ partial \"assets/image.html\" (dict \n            \"src\"      $args.src\n            \"ratio\"    $args.ratio\n            \"page\"     $args.page\n            \"class\"    \"d-block w-100\"\n            \"portrait\" $args.portrait\n            \"loading\"  $args.loading\n            \"title\"    (or $args.title (T \"image\"))\n        ) }}\n        <div class=\"carousel-caption gradient\"></div>\n        {{ with $args.caption }}\n            <div class=\"carousel-caption d-none d-md-block\">\n                <div class=\"d-flex justify-content-center align-items-end h-100 w-100 p-4\">{{ . }}</div>\n            </div>\n        {{ end }}\n    </div>\n{{ end }}"
  },
  {
    "path": "layouts/_partials/assets/download.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{ $error := false }}\n\n{{/* Initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"download\" \"args\" . \"group\" \"partial\") }}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\" \"assets/download.html\" \n        \"warnid\"  \"warn-invalid-arguments\"\n        \"msg\"     \"Invalid arguments\"\n        \"details\" ($args.errmsg | append $args.warnmsg)\n        \"file\"    page.File\n    )}}\n    {{ $error = $args.err }}\n{{ end }}\n\n{{ $download := \"\" }}\n{{ if not $error }}\n    {{- $download = partial \"utilities/GetTargetPath.html\" (dict \"path\" $args.download \"page\" page) -}}\n    {{- if and $download (not (fileExists (path.Join \"static\" $download))) -}}\n        {{ if page.File }}\n            {{- errorf \"Cannot find download file for page '%s': %s\" page.File.Path $download -}}\n        {{ else }}\n            {{- errorf \"Cannot find download file: %s\" $download -}}\n        {{ end }}\n        {{- $error = true }}\n    {{- end -}}\n{{- end -}}\n\n{{ if not $error }}\n    {{- $title := $args.title -}}\n    {{ if not $title }}\n        {{ if not $args.minimal }}{{ $title = (T \"download\" ) }}{{ end }}\n        {{ $lang := strings.TrimPrefix \".\" (path.Ext (path.BaseName $download)) }}\n        {{ if and $lang (ne site.Language.Lang $lang) }}\n            {{ range site.Languages }}\n                {{ if eq .LanguageCode $lang }}\n                    {{ $title = printf \"%s (%s)\" (T \"download\") (T (printf \"lang_%s\" .LanguageCode)) }}\n                {{ end }}\n            {{ end }}\n        {{ end }}\n    {{ end }}\n    {{ $attr := dict \"download\" (path.Base $download) }}\n    {{ partial \"assets/button.html\" (dict \n        \"href\"        $download\n        \"title\"       $title\n        \"color\"       $args.color\n        \"outline\"     $args.outline\n        \"link-type\"   $args.linkType\n        \"icon\"        $args.icon\n        \"order\"       $args.order\n        \"button-size\" $args.size\n        \"justify\"     $args.justify\n        \"class\"       $args.class\n        \"attributes\"  $attr\n    ) }}\n{{ end }}\n\n"
  },
  {
    "path": "layouts/_partials/assets/featured-illustration.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{ $error := false }}\n\n{{/* Initialize arguments */}}\n{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"featured-illustration\" \"args\" . \"group\" \"partial\") -}}\n{{- if or $args.err $args.warnmsg -}}\n    {{- partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\" \"assets/featured-illustration.html\" \n        \"warnid\"  \"warn-invalid-arguments\"\n        \"msg\"     \"Invalid arguments\"\n        \"details\" ($args.errmsg | append $args.warnmsg)\n        \"file\"    page.File\n    ) -}}\n    {{- $error = $args.err -}}\n{{- end -}}\n\n{{/* Initialize local arguments */}}\n{{- $icon := partial \"utilities/GetTargetPath.html\" (dict \"path\" $args.icon \"page\" $args.page) -}}\n{{- $image := partial \"utilities/GetTargetPath.html\" (dict \"path\" $args.image \"page\" $args.page) -}}\n{{- $wrapper := $args.wrapper -}}\n{{- if $image }}{{ $wrapper = printf \"%s\" (or $wrapper \"img-wrap mx-auto\") }}{{ end -}}\n{{- $class := $args.class -}}\n\n{{- if $icon -}}\n    {{- if eq (lower (path.Ext $icon)) \".json\" -}}\n        {{- if site.Params.env_bookshop_live }}\n            <i>Animation preview not supported</i>\n        {{- else }}\n            {{- partial \"assets/animation.html\" (dict\n                \"data\"  $icon\n                \"mode\"  $args.mode\n                \"loop\"  false\n                \"hover\" true\n                \"class\" \"col-6 mx-auto text-center\"\n            ) -}}\n        {{- end -}}\n    {{- else }}\n        {{ partial \"assets/icon.html\" (dict \"icon\" $icon \"class\" $class \"wrapper\" $wrapper \"spacing\" false) -}}\n    {{- end -}}\n{{- else if $image -}}\n    {{- if not (hasSuffix $image \"svg\") }}{{ $class = strings.TrimSpace (printf \"%s rounded\" (or $class \"\")) }}{{ end -}}\n    {{- partial \"assets/live-image.html\" (dict\n        \"src\"      $image\n        \"anchor\"   $args.anchor\n        \"ratio\"    $args.ratio\n        \"portrait\" $args.portrait\n        \"wrapper\"  $wrapper\n        \"class\"    $class\n        \"title\"    $args.title\n        \"sizes\"    $args.sizes\n        \"priority\" \"high\"\n        \"mode\"     $args.mode\n    ) -}}\n{{- end -}}\n"
  },
  {
    "path": "layouts/_partials/assets/helpers/GetDimension.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{ $error := false }}\n\n{{/* Initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"get-dimension\" \"args\" . \"group\" \"partial\") }}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\" \"assets/helpers/get-dimension.html\" \n        \"warnid\"  \"warn-invalid-arguments\"\n        \"msg\"     \"Invalid arguments\"\n        \"details\" ($args.errmsg | append $args.warnmsg)\n        \"file\"    page.File\n    )}}\n    {{ $error = $args.err }}\n{{ end }}\n\n{{/* Initialize local arguments */}}\n{{ $dim := slice }}\n{{ $default := dict\n    \"4x3\"  \"1400x1050\"\n    \"3x1\"  \"1400x467\"\n    \"3x2\"  \"1400x933\"\n    \"1x1\"  \"1400x1400\"\n    \"16x9\" \"1400x788\"\n    \"21x9\" \"1400x600\"\n    \"auto\" \"1400\" \n}}\n\n{{ if not $args.err }}\n    {{/* Initialize dimensions data - stripping unsupported file extension */}}\n    {{ $config := \"dimensions\" }}\n    {{ with index site.Params \"dam\" }}{{ with index . \"dimensions\" }}{{ $config = . }}{{ end }}{{ end }}\n    {{ $config = path.Join (path.Dir $config) (path.BaseName $config) }}\n\n    {{ with index site.Data $config }}\n        {{ $matches := first 1 (where . \"ratio\" $args.ratio) }}\n        {{ if eq ($matches | len) 1 }}\n            {{ $dim = (index $matches 0).dimensions }}\n        {{ end }}\n    {{ end }}\n\n    {{ if not $dim }}{{ $dim = slice (index $default $args.ratio) }}{{ end }}\n{{ end }}\n\n{{ return $dim }}\n"
  },
  {
    "path": "layouts/_partials/assets/helpers/image-definition.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{- $error := false -}}\n\n{{/* Initialize arguments */}}\n{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"image-definition\" \"args\" . \"group\" \"partial\") -}}\n{{- if or $args.err $args.warnmsg -}}\n    {{- partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\" \"assets/helpers/image-definition.html\" \n        \"warnid\"  \"warn-invalid-arguments\"\n        \"msg\"     \"Invalid arguments\"\n        \"details\" ($args.errmsg | append $args.warnmsg)\n        \"file\"    page.File\n    )}}\n    {{- $error = $args.err -}}\n{{- end -}}\n\n{{/* Initialize local arguments */}}\n{{- $src := $args.src -}}\n{{- $wrapper := $args.wrapper -}}\n{{- $alt := or $args.title $args.caption (T \"image\") -}}\n{{- $modes := $args.modes -}}\n\n{{/* Split url into base and anchor when applicable (only relevant for vector images) */}}\n{{- $fileAnchor := \"\" -}}\n{{- $segments := split $src \"#\" -}}\n{{- if gt (len $segments) 2 -}}\n    {{- errorf \"Invalid path or url: %q\" $src -}}\n{{- else if eq (len $segments) 2 -}}\n    {{- $src = index $segments 0 -}}\n    {{- $fileAnchor = index $segments 1 -}}\n{{- end -}}\n\n{{/* Obtain fallback URL and imageset definition */}}\n{{- $target := partial \"assets/helpers/image-dimension.html\" (dict \n    \"page\"     $args.page\n    \"src\"      $src\n    \"ratio\"    $args.ratio\n    \"portrait\" $args.portrait\n    \"plain\"    $args.plain \n    \"imageset\" true\n    \"anchor\"   $args.anchor\n) -}}\n{{- $fallbackURL := index $target \"target\" -}}\n{{- $imgset := index $target \"set\" -}}\n{{- $height := index $target \"height\" -}}\n{{- $width := index $target \"width\" -}}\n{{- $data := index $target \"data\" -}}\n\n{{ if and $args.imageWidth $args.imageHeight }}\n    {{ $height = $args.imageHeight }}\n    {{ $width = $args.imageWidth }}\n{{ else if and $args.imageWidth $height $width }}\n    {{ $height = int (math.Round (mul (div (float $args.imageWidth) $width) $height)) }}\n    {{ $width = $args.imageWidth }}\n{{ else if and $args.imageHeight $height $width }}\n    {{ $width = int (math.Round (mul (div (float $args.imageHeight) $height) $width)) }}\n    {{ $height = $args.imageHeight }}\n{{ end }}\n\n{{/* Add color modes */}}\n{{- range $none := $modes -}}\n    {{- if ne $none $args.colorMode -}}\n        {{- $wrapper = printf \"%s d-none-%s\" (or $wrapper \"\") $none -}}\n    {{- end -}}\n{{- end -}}\n\n{{/* Generate image definition */}}\n{{- if not $args.err -}}\n    {{- if $args.caption -}}\n        <figure {{ with $wrapper }}class=\"{{ . }}\"{{ end }}>\n    {{- else -}}\n        {{- with $wrapper }}<div class=\"{{ . }}\">{{ end }}\n    {{- end -}}\n    {{- if $data -}}\n        {{- if and site.Params.debugging.includeSVGOrigin $.url -}}\n            {{- printf \"{{/* <svg src=\\\"%s\\\"> */}}\" $.url | safeHTML -}}\n        {{- end -}}\n        {{- with $args.class }}{{ $data = replace $data \"<svg\" (printf \"<svg class=\\\"%s\\\"\" .) }}{{ end -}}\n        {{- $data | safeHTML -}}\n    {{- else if not $fileAnchor -}}\n        <img class=\"img-fluid {{ $args.class }}\"\n            src=\"{{ $fallbackURL }}\"\n            {{ if eq $args.loading \"lazy\" }} loading=\"lazy\"{{ end -}}\n            {{ with $args.priority }} fetchpriority=\"{{ . }}\"{{ end -}}\n            {{ with $imgset }} srcset=\"{{ . }}\" sizes=\"{{ $args.sizes }}\"{{ end -}}\n            {{ with $height }} height=\"{{ . }}\"{{ end -}}\n            {{ with $width }} width=\"{{ . }}\"{{ end -}}\n            {{ with $alt }} alt=\"{{ . }}\"{{ end }}>\n    {{- else -}}\n        <svg class=\"{{ $args.class }}\"\n        {{ if or $args.imageHeight $args.imageWidth }}\n            {{ with $width }} width=\"{{ . }}\"{{ end }}\n            {{ with $height }} height=\"{{ . }}\"{{ end }}\n        {{ end }}\n        >\n            <use href=\"{{ $fallbackURL }}#{{ $fileAnchor }}\"></use>\n        </svg>\n    {{- end -}}\n    {{- if $args.caption -}}\n            <figcaption class=\"figure-caption{{ with $args.figclass }} {{ . }}{{ end }}\">{{ $args.caption | safeHTML }}</figcaption>\n        </figure>\n    {{- else if $wrapper -}}\n        </div>\n    {{- end -}}\n{{- end -}}"
  },
  {
    "path": "layouts/_partials/assets/helpers/image-dimension.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{ $error := false }}\n\n{{/* Initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"image-dimension\" \"args\" . \"group\" \"partial\") }}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\" \"assets/helpers/image-dimension.html\" \n        \"warnid\"  \"warn-invalid-arguments\"\n        \"msg\"     \"Invalid arguments\"\n        \"details\" ($args.errmsg | append $args.warnmsg)\n        \"file\"    page.File\n    )}}\n    {{ $error = $args.err }}\n{{ end }}\n\n{{/* Initialize local arguments */}}\n{{- $src := $args.src -}}\n{{- $height := or $args.imageHeight $args.height -}}\n{{- $width := or $args.imageWidth $args.width -}}\n{{- $targetURL := \"\" -}}\n{{- $set := \"\" -}}\n\n{{/* Split url into base and anchor when applicable (only relevant for vector images) */}}\n{{- $segments := split $src \"#\" -}}\n{{- if gt (len $segments) 2 -}}\n    {{- errorf \"Invalid path or url: %q\" $src -}}\n{{- else if eq (len $segments) 2 }}\n    {{- $src = index $segments 0 -}}\n{{- end -}}\n\n{{/* Identify image provider */}}\n{{ $hook := \"\" }}\n{{ $account := \"\" }}\n{{ $container := \"\" }}\n{{ $rewrite := false }}\n{{ range $provider, $val := site.Params.images }}\n    {{ if not $hook }}    \n        {{ with index $val \"host\" }}\n            {{ if (findRE . (urls.Parse $src).Hostname) }}\n                {{ $hook = $provider }}\n                {{ with index $val \"account\" }}{{ $account = . }}{{ end }}\n                {{ with index $val \"rewrite\" }}{{ $rewrite = . }}{{ end }}\n                {{ with index $val \"container\" }}{{ $container = . }}{{ end }}\n            {{ end }}\n        {{ end }}\n    {{ end }}\n{{ end }}\n{{ if not $hook }}{{ $hook = \"hugo\" }}{{ end }}\n\n{{/* Rewrite the origin URL if applicable */}}\n{{ if $rewrite }}\n    {{ $src = partial \"assets/helpers/image-rewrite.html\" (dict \"src\" $src \"account\" $account \"container\" $container \"hook\" $hook) }}\n{{ end }}\n\n{{/* Detect static assets — must be computed after any URL rewrite */}}\n{{- $staticPath := strings.TrimPrefix \"/static\" $src -}}\n{{- $isURL := or (hasPrefix $src \"http://\") (hasPrefix $src \"https://\") -}}\n{{- $isStatic := and (not $isURL) (fileExists (path.Join \"/static\" $staticPath)) -}}\n\n{{/* Define image dimensions */}}\n{{ $dims := slice }}\n{{- $res := \"\" -}}\n{{- $img := \"\" -}}\n{{- $data := \"\" -}}\n{{ $transform := \"\" }}\n{{- if hasSuffix $src \"svg\" -}}\n    {{- $res = partial \"utilities/GetResource.html\" (dict \"url\" $src \"page\" $args.page) -}}\n    {{ if not $res }}\n        {{- $u := urls.Parse site.BaseURL }}\n        {{- $targetURL := strings.TrimPrefix $u.Path $src -}}\n        {{- $targetURL = strings.TrimPrefix \"/static\" $src -}}\n        {{- if not (fileExists (path.Join \"/static\" $targetURL)) -}}\n            {{ warnf \"Cannot find vector image resource: %q\" $src -}}\n        {{ else }}\n            {{ $width := string (partial \"utilities/GetWidth.html\" (dict \"path\" $targetURL \"height\" 500)) }}\n            {{ if $width }}\n                {{ $dims = $dims | append (printf \"%sx500\" $width) }}\n            {{ else }}\n                {{ $dims = $dims | append \"500\" }}\n            {{ end }}\n        {{ end }}\n    {{ else if eq (string $res.MediaType) \"image/svg+xml\" }}\n        {{ $data = $res.Content }}\n    {{ else }}\n        {{ warnf \"Unsupported media type '%s': %q\" (string $res.MediaType) $src -}}\n    {{ end }}\n{{ else if and $args.ratio (ne $args.ratio \"auto\") }}\n    {{ $transform = \"fill\" }}\n    {{ $dims = partial \"assets/helpers/GetDimension.html\" (dict \"ratio\" $args.ratio) }}\n    {{ if not $dims }}{{ errorf \"partial [assets/image.html] - Cannot find dimension data: %s\" $args.ratio }}{{ end }}\n{{ else if (and $height $width) }}\n    {{ $transform = \"fill\" }}\n    {{ $dims = slice (printf \"%dx%d\" $width $height) }}\n{{ else if and (not $args.plain) (not $isStatic) }}\n    {{ $transform = \"fit\" }}\n    {{- $res := partial \"utilities/GetImage.html\" (dict \"url\" $src \"page\" $args.page) -}}\n    {{ if and $res (not (eq $res.resource nil)) }}\n        {{ $img = $res.resource }}\n        {{ if $res.mirror }}{{ $class = printf \"%s mirrorred\" $class }}{{ end }}\n\n        {{ $widths := partial \"assets/helpers/GetDimension.html\" (dict \"ratio\" \"auto\") }}\n        {{ range $w := $widths -}}\n            {{ $height = int (math.Round (mul (div (float $w) $img.Width) $img.Height)) }}\n            {{- $dims = $dims | append (printf \"%dx%d\" (int $w) $height ) -}}\n        {{- end -}}\n    {{ end }}\n{{ end }}\n\n{{/* Derive image width and height */}}\n{{ if not $args.plain }}\n    {{ if $args.portrait }}\n        {{ with $dims }}\n            {{ $newDims := slice }}\n            {{ range $dim := . }}\n                {{ $width = (int (index (split $dim \"x\") 1)) }}\n                {{ $height = (int (index (split $dim \"x\") 0)) }}\n                {{- $newDims = $newDims | append (printf \"%dx%d\" (int $width) $height ) -}}\n            {{ end }}\n            {{ $dims = $newDims }}\n        {{ end }}\n\n        {{ $newWidth := $height }}\n        {{ $newHeight := $width }}\n        {{ $width = $newWidth }}\n        {{ $height = $newHeight }}\n    {{ else  }}\n        {{ with $dims }}\n            {{ range $dim := (. | last 1) }}\n                {{ $width = (int (index (split $dim \"x\") 0)) }}\n                {{ $height = (int (index (split $dim \"x\") 1)) }}\n            {{ end }}\n        {{ end }}\n    {{ end }}\n{{ end }}\n\n{{/* Generate image url */}}\n{{ if or (hasSuffix $src \"svg\") $isStatic $args.plain }}\n    {{- $targetURL = partial \"utilities/GetStaticURL\" (dict \"url\" $staticPath) -}}\n{{ else if (gt (len $dims) 0) }}\n    {{- $targetURL = partial \"assets/helpers/image-set.html\" (dict \n        \"src\"           $src\n        \"img\"           $img\n        \"dims\"          ($dims | last 1)\n        \"anchor\"        $args.anchor\n        \"transform\"     $transform\n        \"hook\"          $hook\n        \"format\"        \"png\"\n        \"include-width\" false\n    )}}\n    {{ if $args.imageset }}\n        {{- $set = partial \"assets/helpers/image-set.html\" (dict \n            \"src\"           $src\n            \"img\"           $img\n            \"dims\"          $dims\n            \"anchor\"        $args.anchor\n            \"transform\"     $transform\n            \"hook\"          $hook\n            \"include-width\" true\n        ) -}}\n    {{ end }}\n{{ end }}\n\n{{ return (dict \"target\" $targetURL \"set\" $set \"height\" $height \"width\" $width \"data\" $data) }}"
  },
  {
    "path": "layouts/_partials/assets/helpers/image-rewrite.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{ $error := false }}\n\n{{/* Initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"image-rewrite\" \"args\" . \"group\" \"partial\") }}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\" \"assets/helpers/image-rewrite.html\" \n        \"warnid\"  \"warn-invalid-arguments\"\n        \"msg\"     \"Invalid arguments\"\n        \"details\" ($args.errmsg | append $args.warnmsg)\n        \"file\"    page.File\n    )}}\n    {{ $error = $args.err }}\n{{ end }}\n\n{{/* Initialize local arguments */}}\n{{- $src := $args.src -}}\n{{- $container := .container -}}\n{{ $host := (urls.Parse $src).Hostname }}\n{{ $dir := (urls.Parse $src).Path }}\n{{ $file := index ((split $dir \"/\") | collections.Reverse) 0 }}\n{{ $dir = strings.TrimSuffix $file $dir }}\n{{ $error := false }}\n\n{{ $adapter := (printf \"assets/adapters/%s-rewrite.html\" $args.hook) }}\n{{ if not (fileExists (path.Join \"/layouts/_partials\" $adapter)) }}\n    {{ warnf \"Cannot find adapter: %s\" (path.Join \"/layouts/_partials\" $adapter) }}\n    {{ $error = true }}\n{{ end }}\n\n{{ $result := $src }}\n{{ if not $error }}\n    {{ $result = partial $adapter (dict \n        \"account\"   $args.account\n        \"container\" $args.container\n        \"host\"      $host\n        \"dir\"       $dir\n        \"file\"      $file\n    )}}\n{{ end }}\n\n{{ return $result }}"
  },
  {
    "path": "layouts/_partials/assets/helpers/image-set.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{/* Initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"image-set\" \"args\" . \"group\" \"partial\") }}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\" \"assets/helpers/image-set.html\" \n        \"warnid\"  \"warn-invalid-arguments\"\n        \"msg\"     \"Invalid arguments\"\n        \"details\" ($args.errmsg | append $args.warnmsg)\n        \"file\"    page.File\n    )}}\n{{ end }}\n\n{{/* Initialize local arguments */}}\n{{- $src := $args.src -}}\n{{ $absoluteURL := $args.absoluteUrl }}\n{{ $hook := $args.hook }}\n{{ $host := (urls.Parse $src).Hostname }}\n{{ $dir := (urls.Parse $src).Path }}\n{{ $file := index ((split $dir \"/\") | collections.Reverse) 0 }}\n{{ $dir = strings.TrimSuffix $file $dir }}\n\n{{ $adapter := (printf \"assets/adapters/%s.html\" $hook) }}\n{{ if not (fileExists (path.Join \"/layouts/_partials\" $adapter)) }}\n    {{ warnf \"Cannot find adapter: %s\" (path.Join \"/layouts/_partials\" $adapter) }}\n    {{ $hook = \"hugo\" }}\n    {{ $adapter = \"assets/adapters/hugo.html\" }}\n{{ end }}\n\n{{ $imgset := slice }}\n{{ if not $args.err }}\n    {{- range $index, $dim := $args.dims -}}\n        {{ $width := (int (index (split $dim \"x\") 0)) }}\n        {{ $height := (int (index (split $dim \"x\") 1)) }}\n\n        {{- $element := partial $adapter (dict \n            \"url-host\"     $host\n            \"url-dir\"      $dir\n            \"url-file\"     $file\n            \"img\"          $args.img\n            \"absolute-url\" $absoluteURL\n            \"transform\"    $args.transform\n            \"image-width\"  $width\n            \"image-height\" $height\n            \"format\"       $args.format\n            \"anchor\"       $args.anchor\n        )}}\n        {{ if $args.includeWidth }}\n            {{ $imgset = $imgset | append (printf \"%s %dw\" $element $width) }}\n        {{ else }}\n            {{ $imgset = $imgset | append $element }}\n        {{ end }}\n    {{- end -}}\n{{- end -}}\n\n{{ return (delimit $imgset \", \") }}"
  },
  {
    "path": "layouts/_partials/assets/helpers/navbar-item.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{ $error := false }}\n\n{{/* Initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"navbar-item\" \"args\" . \"group\" \"partial\") }}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\" \"assets/helpers/navbar-item.html\" \n        \"warnid\"  \"warn-invalid-arguments\"\n        \"msg\"     \"Invalid arguments\"\n        \"details\" ($args.errmsg | append $args.warnmsg)\n        \"file\"    page.File\n    )}}\n    {{ $error = true }}\n{{ end }}\n\n{{/* Initialize local arguments */}}\n{{- $page := $args.page -}}\n{{- $entry := or $args.menuEntry $args.menu -}}\n{{- if not $entry }}\n    {{ partial \"utilities/LogErr.html\" (dict \n        \"partial\" \"assets/helpers/navbar-item.html\" \n        \"warnid\"  \"warn-invalid-arguments\"\n        \"msg\"     \"Invalid arguments\"\n        \"details\" (slice \"missing argument `menu-entry`\")\n        \"file\"    page.File\n    )}}\n    {{ $error = true }}\n{{ end }}\n{{- $cue := site.Params.main.externalLinks.cue -}}\n{{ $params := $entry.Params | default dict }}\n{{- if (isset $params \"cue\") }}{{ $cue = $params.cue }}{{ end -}}\n{{- $tab := site.Params.main.externalLinks.tab -}}\n{{- if (isset $params \"tab\") }}{{ $tab = $params.tab }}{{ end -}}\n{{- $externalLink := partial \"utilities/GetThemeIcon.html\" (dict \"id\" \"externalLink\" \"default\" \"fas up-right-from-square\") -}}\n{{- $baseURL := $page.Scratch.Get \"baseURL\" | default \"/\" -}}\n{{- $menuURL := \"\" -}}\n{{ if or (strings.HasPrefix $entry.PageRef \"http\") (strings.HasPrefix $entry.URL \"http\") }}\n    {{ $menuURL = or $entry.PageRef $entry.URL }}\n{{ else if (or $entry.PageRef $entry.URL) }}\n    {{- $menuURL = partial \"utilities/URLJoin.html\" (dict \"base\" $baseURL \"path\" ((or $entry.PageRef $entry.URL) | relLangURL)) -}}\n{{ end }}\n{{- $pageURL := $page.RelPermalink -}}\n{{- $isActive := and (ne $menuURL \"\") (or (eq $pageURL $menuURL) (and (ne $menuURL (\"/\" | relLangURL)) (strings.HasPrefix $pageURL $menuURL))) -}}\n{{ if not $entry.PageRef }}{{ $isActive = false }}{{ end }}\n{{- $isIcon := or $entry.Params.icon $entry.Pre -}}\n{{- $isAlias := $entry.Params.alias -}}\n{{- $isControl := $entry.Params.control -}}\n\n{{- $url := urls.Parse $menuURL -}}\n{{- $baseURL := urls.Parse $.Site.Params.Baseurl -}}\n{{- $isExternal := ne $url.Host $baseURL.Host -}}\n{{- $externalHref := \"\" }}\n{{- $suffix := \"\" }}\n{{- $anchorClass := \"\" -}}\n\n{{- if $isExternal }}\n    {{- if $tab }}{{ $externalHref = \"target=\\\"_blank\\\" rel=\\\"noopener noreferrer nofollow\\\"\" }}{{ end -}}\n    {{- if $cue }}{{ $suffix = partial \"assets/icon.html\" (dict \"icon\" $externalLink \"class\" \"fa-2xs my-auto\") }}{{ end -}}\n{{ else if $menuURL }}\n    {{ $ref := partial \"utilities/GetPage.html\" (dict \"url\" $url.Path \"page\" $page) }}\n    {{- if not $ref -}}\n        {{- warnf \"partial [assets/helpers/navbar-item.html] - Cannot find page of menu item '%s': %s\" $entry.Name $url -}}\n    {{ end }}\n{{ end -}}\n\n{{- $mainNav := urlize (lower $entry.Name) -}}\n{{- $childNav := \"\" -}}\n\n{{- $button := \"\" -}}\n{{- if $args.modal -}}\n    {{- $button = printf \" role=%q data-bs-toggle=%q data-bs-target=%q\" \"button\" \"modal\" $args.modal -}}\n{{- end -}}\n{{- $menuParent := or $args.menuParent $args.parent  }}\n{{- if $menuParent -}}\n    {{- $mainNav = urlize (lower $menuParent.Name) -}}\n    {{- $childNav = urlize (lower $entry.Name) -}}\n    {{- $anchorClass = \"dropdown-item\" -}}\n{{- else if and (not $args.plain) $entry.HasChildren -}}\n    {{- $anchorClass = \"nav-link dropdown-toggle\" -}}\n    {{- $button = \" role=\\\"button\\\" data-bs-toggle=\\\"dropdown\\\" aria-expanded=\\\"false\\\"\" -}}\n{{- else -}}\n    {{- $anchorClass = \"nav-link\" -}}\n{{- end -}}\n{{- $params := \"\" -}}\n{{- if and $isAlias (not $isExternal) -}}\n    {{- $params = printf \"?menu=%s\" $mainNav -}}\n    {{- with $childNav }}{{ $params = printf \"%s&child=%s\" $params . }}{{ end -}}\n{{- end -}}\n\n{{/* Main code */}}\n{{ if not $error }}\n    {{ $title := $entry.Name }}\n    {{ if and site.Params.main.titleCase (not $args.page.Params.exact) }}{{ $title = title $title }}{{ end }}\n\n    {{ if $entry.Params.button }}\n        {{ partial \"assets/button.html\" (dict\n            \"title\"       $title\n            \"icon\"        (string $entry.Pre)\n            \"href\"        $menuURL\n            \"button-size\" \"sm\"\n            \"cue\"         $cue\n            \"tab\"         $tab\n            \"outline\"     $entry.Params.outline \n        )}}\n    {{ else }}\n        {{ cond (ne $menuURL \"\") \"<a\" \"<div\" | safeHTML }}\n            class=\"{{ $anchorClass }}{{ if $isActive }} active{{ end }}{{ with $args.class }} {{ . }}{{ end }}\"\n            {{ if $isIcon }}aria-label=\"{{ $title }}\"{{ end }}\n            data-nav=\"main\" data-nav-main=\"{{ $mainNav }}\"{{ with $childNav }} data-nav-child=\"{{ . }}\"{{ end }}\n            {{ if $menuURL }} href=\"{{ $menuURL }}{{ $params | safeHTML }}\"{{ with $externalHref }} {{ . | safeHTML }}{{ end }}{{ end }}\n            {{ $button | safeHTML }}\n            {{ with $args.id }}id=\"{{ . }}\"{{ end }}\n            >\n\n            {{- with $entry.Pre }}\n                {{ if hasPrefix . \"<i\" }}\n                    {{ . | safeHTML }}\n                {{ else }}\n                    {{ partial \"assets/icon.html\" (dict \"icon\" (string .) \"class\" \"fa-fw my-auto\" \"spacing\" false) }}\n                {{ end }}\n            {{ end -}}\n            <span class=\"{{ if $isActive }}active{{ end }} {{ with $args.breakpoint }}d-{{ . }}-none {{ end }}\">\n                {{- if and $isIcon $entry.Pre }}&nbsp;{{ end }}{{ $title }}\n                {{- with $entry.Post }}{{ . }}{{ end -}}\n                {{- with $suffix }}&nbsp;{{ . }}{{ end -}}\n            </span>\n            {{ if or (not $isIcon) (not $isControl) }}\n            <span class=\"{{ if $isActive }}active{{ end }} {{ with $args.breakpoint }}d-none d-{{ . }}-block{{ end }}\">\n                {{- if and $isIcon $entry.Pre }}&nbsp;{{ end }}{{ $title }}\n                {{- with $entry.Post }}{{ . }}{{ end -}}\n                {{- with $suffix }}&nbsp;{{ . }}{{ end -}}\n            </span>\n            {{ end }}\n        {{ cond (ne $menuURL \"\") \"</a>\" \"</div>\" | safeHTML }}\n    {{ end }}\n{{ end }}"
  },
  {
    "path": "layouts/_partials/assets/helpers/navbar-languages.html",
    "content": "{{- $page := .page -}}\n{{- $baseURL := .baseURL -}}\n{{- $breakpoint := .breakpoint -}}\n{{- $pretty := .pretty -}}\n{{- $icon := .icon | default \"fas globe\" -}}\n{{- $fs := site.Params.navigation.fontsizeCollapsed | default 6 -}}\n{{- $inline := site.Params.navigation.language.inline | default false -}}\n{{- $class := cond $inline \"inline-menu\" \"dropdown-menu dropdown-menu-end\" }}\n\n{{- $lang := $page.Language.Lang -}}\n<li class=\"nav-item dropdown me-auto\">\n    {{ if not $inline }}\n        <a class=\"nav-link dropdown-toggle d-{{ $breakpoint }}-none\" role=\"button\" data-bs-toggle=\"dropdown\" \n            aria-label=\"{{ T \"languageSwitcherLabel\" }}\" aria-expanded=\"false\">\n            {{- partial \"assets/icon.html\" (dict \"icon\" $icon \"class\" \"fa-fw\" \"spacing\" true) }}{{ T \"languageSwitcherLabel\" }}\n        </a>\n        <a class=\"nav-link dropdown-toggle d-none d-{{ $breakpoint }}-block\" role=\"button\" data-bs-toggle=\"dropdown\"\n            aria-label=\"{{ T \"languageSwitcherLabel\" }}\" aria-expanded=\"false\">\n            {{- partial \"assets/icon.html\" (dict \"icon\" $icon \"class\" \"fa-fw\" \"spacing\" false) }}\n        </a>\n    {{ end }}\n    <ul id=\"language-selector\" class=\"{{ $class }} navbar-fs-{{ $fs }} navbar-{{ $breakpoint }}-fs\" data-translated=\"{{ $page.IsTranslated }}\">\n        {{- if $page.IsTranslated -}}\n            {{- range $page.AllTranslations -}}\n                <li>\n                    {{- $state := cond (eq .Language.Lang $lang) \"active\" \"\" }}\n                    <a class=\"dropdown-item {{ $state }}\" hreflang=\"{{ .Language.Lang }}\" href=\"{{ .RelPermalink }}\">\n                        {{- cond $inline (upper .Language.Lang) .Language.LanguageName -}}\n                    </a>\n                </li>\n            {{- end -}}\n        {{- else -}}\n            {{- range site.Languages -}}\n                <li>\n                    {{- $state := cond (eq .Lang $lang) \"active\" \"disabled\" }}\n                    <a class=\"dropdown-item {{ $state }}\" href=\"{{ cond (eq $state \"active\") $page.RelPermalink \"#!\" }}\" hreflang=\"{{ .Lang }}\">\n                    {{- cond $inline (upper .Lang) (default .Lang .LanguageName) -}}\n                    </a>\n                </li>\n            {{- end -}}\n        {{- end -}}\n    </ul>\n</li>"
  },
  {
    "path": "layouts/_partials/assets/helpers/navbar-mode.html",
    "content": "{{- $id := .id | default \"navbar-mode\" -}}\n{{- $toggle := .toggle | default false -}}\n{{- $breakpoint := .breakpoint -}}\n{{- with site.Params.main.colorMode.iconLight -}}\n    {{- partial \"utilities/LogWarn.html\" (dict\n        \"partial\" \"assets/helpers/navbar-mode.html\"\n        \"warnid\"  \"warn-deprecated-icons\"\n        \"msg\"     \"Deprecated icon params detected; migrate to the [icons] section in params.toml\"\n        \"details\" (slice \"Replace 'main.colorMode.iconLight' with 'icons.colorModeLight'\")\n    ) -}}\n{{- end -}}\n{{- with site.Params.main.colorMode.iconDark -}}\n    {{- partial \"utilities/LogWarn.html\" (dict\n        \"partial\" \"assets/helpers/navbar-mode.html\"\n        \"warnid\"  \"warn-deprecated-icons\"\n        \"msg\"     \"Deprecated icon params detected; migrate to the [icons] section in params.toml\"\n        \"details\" (slice \"Replace 'main.colorMode.iconDark' with 'icons.colorModeDark'\")\n    ) -}}\n{{- end -}}\n{{- $iconLight := partial \"utilities/GetThemeIcon.html\" (dict \"id\" \"colorModeLight\" \"alias\" site.Params.main.colorMode.colorModeLight \"default\" \"fas sun\") -}}\n{{- $iconDark := partial \"utilities/GetThemeIcon.html\" (dict \"id\" \"colorModeDark\" \"alias\" site.Params.main.colorMode.colorModeDark \"default\" \"fas moon\") -}}\n{{- $fs := site.Params.navigation.fontsizeCollapsed | default 6 -}}\n\n<li class=\"nav-link navbar-fs-{{ $fs }} navbar-{{ $breakpoint }}-fs d-flex mode-{{ cond $toggle \"toggle\" \"switch\" }} align-items-center\" id=\"{{ $id }}\">\n    <input type=\"checkbox\" class=\"checkbox navbar-mode-selector\" id=\"{{ $id }}-checkbox\" aria-label=\"{{ T \"colorMode\" }}\" />\n    <label class=\"label\" for=\"{{ $id }}-checkbox\">\n        {{ if $toggle }}\n            <div class=\"mode-item d-none-main-dark\">\n                {{- partial \"assets/icon.html\" (dict \"icon\" $iconLight \"class\" \"fa-fw\" \"spacing\" false) }}\n                <span class=\"d-{{ $breakpoint }}-none\">{{ T \"colorMode\" }}</span>\n            </div>\n            <div class=\"mode-item d-none-main-light\">\n                {{- partial \"assets/icon.html\" (dict \"icon\" $iconDark \"class\" \"fa-fw\" \"spacing\" false) }}\n                <span class=\"d-{{ $breakpoint }}-none\">{{ T \"colorMode\" }}</span>\n            </div>\n        {{ else }}\n            {{- partial \"assets/icon.html\" (dict \"icon\" $iconLight \"class\" \"fa-fw\" \"spacing\" false) }}\n            {{- partial \"assets/icon.html\" (dict \"icon\" $iconDark \"class\" \"fa-fw\" \"spacing\" false) }}\n            <div class=\"ball\"></div>\n        {{ end }}\n    </label>\n</li>"
  },
  {
    "path": "layouts/_partials/assets/helpers/navbar-render-menu.html",
    "content": "{{- $page := .page -}}\n{{- $menu := .menu -}}\n{{- $collapsed := .collapsed -}}\n{{- $control := .control | default false -}}\n{{- $horizontal := .horizontal | default false -}}\n{{- $breakpoint := .breakpoint -}}\n{{- $fs := site.Params.navigation.fontsizeCollapsed | default 6 -}}\n\n{{- range $entry := $menu -}}\n    {{ if (eq $control ($entry.Params.control | default false)) }}\n        {{ if $entry.Params.spacing }}\n            <li class=\"nav-item flex-grow-1\"></li>\n        {{ else }}\n            <li class=\"nav-item {{ if .HasChildren }} dropdown me-auto my-auto{{ if $horizontal }} dropdown-horizontal-{{ $breakpoint }}{{ end }}{{ end }}\">\n                {{- partial \"assets/helpers/navbar-item.html\" (dict \"menu-entry\" $entry \"page\" $page) -}}\n                {{- if .HasChildren -}}\n                    <ul class=\"dropdown-menu{{ if $control }} dropdown-menu-end{{ end }}\">\n                        {{- range .Children -}}\n                            <li>{{- partial \"assets/helpers/navbar-item.html\" (dict\n                                    \"menu-entry\"  .\n                                    \"menu-parent\" $entry\n                                    \"page\"        $page\n                                    \"breakpoint\"  $breakpoint\n                                    \"modal\"       .Params.modal\n                                    \"id\"          .Params.id\n                                    \"class\"       (printf \"navbar-fs-%d navbar-%s-fs\" $fs $breakpoint)\n                                ) -}}\n                            </li>\n                        {{- end -}}\n                    </ul>\n                {{- end -}}\n            </li>\n        {{- end -}}\n    {{- end -}}\n{{- end -}}"
  },
  {
    "path": "layouts/_partials/assets/helpers/navbar-versions.html",
    "content": "{{- $breakpoint := .breakpoint -}}\n{{- $collapsed := .collapsed -}}\n{{- $page := .page -}}\n{{- $baseURL := .baseURL -}}\n{{- $list := site.Params.docs.releases -}}\n{{- $id := .id -}}\n{{- $version := partial \"utilities/GetVersion.html\" (dict \"page\" $page) -}}\n{{- $fs := site.Params.navigation.fontsizeCollapsed | default 6 -}}\n{{- $navbarVersionCheck := partial \"utilities/GetThemeIcon.html\" (dict \"id\" \"navbarVersionCheck\" \"default\" \"fas check\") -}}\n\n<li class=\"nav-item dropdown {{ if $collapsed }}d-{{ $breakpoint }}-none{{ else }}d-none d-{{ $breakpoint }}-block{{ end }}\">\n    <a class=\"nav-link dropdown-toggle\" role=\"button\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\" id=\"{{ $id }}-version-switch\">\n        {{ if $collapsed }}{{ site.Title }} {{ end }}{{ $version }}\n    </a>\n    <ul class=\"dropdown-menu dropdown-menu-end\" aria-labelledby=\"{{ $id }}-version-switch\">\n        {{- range $index, $item := $list -}}\n            {{- $active := eq $item.label $version -}}\n            {{- $disabled := false -}}\n            {{- if hugo.IsServer }}\n                {{- $disabled = and $item.redirect (gt (len $item.redirect) 0) -}}\n            {{- end -}}\n            {{ if $item.url }}\n                <li>\n                    {{- $url := partial \"utilities/URLJoin.html\" (dict \"base\" $baseURL \"path\" $item.url) | relLangURL -}}\n                    <a class=\"pe-5 dropdown-item{{ if $collapsed }} switch-mode-collapsed{{ end }}{{ if $active }} active{{ end }}{{ if $disabled }} disabled{{ end }}\" href=\"{{ $url }}\">{{ $item.label }}\n                        {{ if $item.latest }}&nbsp;({{ T \"latest\" }}){{ end }}\n                        {{ if $active }}\n                            <span class=\"position-absolute end-0 me-3\">{{- partial \"assets/icon.html\" (dict \"icon\" $navbarVersionCheck \"class\" \"fa-fw\") }}</span>\n                        {{ end }}\n                    </a>\n                </li>\n            {{ else }}\n                {{ if gt $index 0}}<li><hr class=\"dropdown-divider\"></li>{{ end }}\n                <li><span class=\"dropdown-header fs-{{ $fs }}\">{{ $item.label }}</span></li>\n            {{ end }}\n        {{- end -}}\n        {{- if site.Params.docs.overview -}}\n            {{ if gt (len $list) 0 }}<li><hr class=\"dropdown-divider\"></li>{{ end }}\n            <li>\n                {{- $url := partial \"utilities/URLJoin.html\" (dict \"base\" $baseURL \"path\" site.Params.docs.overview) | relLangURL -}}\n                <a class=\"dropdown-item{{ if $collapsed }} switch-mode-collapsed{{ end }}\" href=\"{{ $url }}\">{{ T \"allVersions\" }}</a>\n            </li>\n        {{- end -}}\n    </ul>\n</li>"
  },
  {
    "path": "layouts/_partials/assets/helpers/sidebar-menu-entry.html",
    "content": "{{/*\n    Build a hierarchical menu entry from a page and its children.\n\n    Parameters:\n    - page: The page object\n    - grouped: Dictionary mapping parent paths to children slices\n    - sortField: Field to sort children by (e.g., \"title\", \"date\", \"weight\")\n    - reverse: Whether to reverse sort order (default: false)\n\n    Returns: Menu entry dict with title and pages (optional array of nested entries)\n*/}}\n\n{{- $page := .page -}}\n{{- $grouped := .grouped -}}\n{{- $sortField := .sortField | default \"title\" -}}\n{{- $reverse := .reverse | default false -}}\n\n{{- /* Create menu entry with title and absolute link */ -}}\n{{- /* Include the full RelPermalink; sidebar will recognize leading \"/\" as absolute */ -}}\n{{- $entry := dict \"title\" $page.LinkTitle \"link\" $page.RelPermalink -}}\n\n{{- /* Get children from grouped hierarchy */ -}}\n{{- $children := index $grouped $page.RelPermalink | default slice -}}\n{{- if $children -}}\n    {{- /* Sort children using Hugo's page collection methods */ -}}\n    {{- if eq $sortField \"title\" -}}\n        {{- $children = $children.ByTitle -}}\n        \n    {{- else if eq $sortField \"date\" -}}\n        {{- $children = $children.ByDate -}}\n    {{- else if eq $sortField \"weight\" -}}\n        {{- $children = $children.ByWeight -}}\n    {{- else if eq $sortField \"linkTitle\" -}}\n        {{- $children = $children.ByLinkTitle -}}\n    {{- else if eq $sortField \"publishDate\" -}}\n        {{- $children = $children.ByPublishDate -}}\n    {{- else if eq $sortField \"lastmod\" -}}\n        {{- $children = $children.ByLastmod -}}\n    {{- else if eq $sortField \"expiryDate\" -}}\n        {{- $children = $children.ByExpiryDate -}}\n    {{- else if eq $sortField \"length\" -}}\n        {{- $children = $children.ByLength -}}\n    {{- else -}}\n        {{/* Use .ByParam for custom parameters - also returns pages.Pages collection */}}\n        {{- $children = $children.ByParam $sortField -}}\n    {{- end -}}\n    {{- if $reverse }}{{ $children = $children.Reverse }}{{ end -}}\n    {{- /* Recursively build nested menu entries */ -}}\n    {{- $pages := slice -}}\n    {{- range $children -}}\n        {{- $childEntry := partial \"assets/helpers/sidebar-menu-entry\" (dict \"page\" . \"grouped\" $grouped \"sortField\" $sortField \"reverse\" $reverse) -}}\n        {{- $pages = $pages | append $childEntry -}}\n    {{- end -}}\n    {{- $entry = merge $entry (dict \"pages\" $pages) -}}\n{{- end -}}\n\n{{- return $entry -}}\n"
  },
  {
    "path": "layouts/_partials/assets/hero-image.html",
    "content": "{{/* \n    Copyright © 2025 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{/* Initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"hero-image\" \"args\" . \"group\" \"partial\") }}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\" \"assets/hero-image.html\" \n        \"warnid\"  \"warn-invalid-arguments\"\n        \"msg\"     \"Invalid arguments\"\n        \"details\" ($args.errmsg | append $args.warnmsg)\n        \"file\"    page.File\n    )}}\n{{ end }}\n\n{{ if and (not $args.err) (or $args.image $args.icon) }}\n    <div class=\"hero-image-container {{ if $args.image }}d-flex justify-content-center {{ with $args.justify }} justify-content-md-{{ . }}{{ end }}{{ end }}\">\n        {{ partial \"assets/featured-illustration.html\" (dict \n            \"page\"     $args.page\n            \"icon\"     $args.icon\n            \"image\"    $args.image\n            \"anchor\"   $args.anchor\n            \"mode\"     $args.mode\n            \"ratio\"    $args.ratio\n            \"portrait\" $args.portrait\n            \"sizes\"    $args.sizes\n            \"title\"    $args.title\n            \"wrapper\"  $args.wrapper\n            \"class\"    $args.class\n        ) }}\n        {{ if $args.imageOverlay }}<div class=\"hero-image-overlay\"></div>{{ end }}\n    </div>\n{{ end }}"
  },
  {
    "path": "layouts/_partials/assets/image.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{- $error := false -}}\n\n{{/* Initialize arguments */}}\n{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"image\" \"args\" . \"group\" \"partial\") -}}\n{{- if or $args.err $args.warnmsg -}}\n    {{- partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\" \"assets/image.html\" \n        \"warnid\"  \"warn-invalid-arguments\"\n        \"msg\"     \"Invalid arguments\"\n        \"details\" ($args.errmsg | append $args.warnmsg)\n        \"file\"    page.File\n    ) -}}\n    {{- $error = $args.err -}}\n{{- end -}}\n\n{{/* Initialize global arguments */}}\n{{- $absoluteURL := site.Params.main.canonifyAssetsURLs | default false -}}\n{{- $modes := site.Params.main.modes | default (slice \"light\" \"dark\") -}}\n\n{{/* Initialize local arguments */}}\n{{- $caption := $args.caption -}}\n{{- if and site.Params.main.titleCase (not page.Params.exact) (eq $caption (plainify $caption)) -}}\n    {{- $caption = title $caption -}}\n{{- end -}}\n{{- $priority := $args.priority -}}\n{{- if eq $priority \"auto\" }}{{ $priority = \"\" }}{{ end -}}\n{{- $src := or $args.src $args.url -}}\n\n{{/* Main code */}}\n{{- $params := dict -}}\n{{- $params = merge $params (dict\n    \"page\"         $args.page\n    \"ratio\"        $args.ratio\n    \"portrait\"     $args.portrait\n    \"image-width\"  $args.imageWidth\n    \"image-height\" $args.imageHeight\n    \"wrapper\"      $args.wrapper\n    \"class\"        $args.class\n    \"title\"        $args.title\n    \"caption\"      $caption\n    \"figclass\"     $args.figclass\n    \"loading\"      $args.loading\n    \"priority\"     $priority\n    \"sizes\"        $args.sizes\n    \"absolute-url\" $absoluteURL\n    \"plain\"        $args.plain\n    \"anchor\"       $args.anchor\n    )\n-}}\n\n{{- if not $error -}}\n    {{- if $args.mode -}}\n        {{- $ext := path.Ext $src -}}\n        {{- $base := strings.TrimSuffix $ext $src -}}\n        {{- range $suffix := $modes -}}\n            {{- $base = strings.TrimSuffix (printf \"-%s\" $suffix) $base -}}\n        {{- end -}}\n\n        {{- range $suffix := $modes -}}\n            {{- $image := printf \"%s-%s%s\" $base $suffix $ext -}}\n            {{- $params = merge $params (dict\n                    \"src\"   $image\n                    \"wrapper\" (printf \"%s d-none-%s\" $args.wrapper (cond (eq $suffix \"dark\") \"light\" \"dark\"))\n            ) -}}\n            {{- partial \"assets/helpers/image-definition.html\" $params -}}\n        {{- end -}}\n    {{ else }}\n        {{- $params = merge $params (dict \"src\" $src) -}}\n        {{- partial \"assets/helpers/image-definition.html\" $params -}}\n    {{- end -}}\n{{- end -}}"
  },
  {
    "path": "layouts/_partials/assets/link.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{- $error := false -}}\n{{- $errmsg := slice -}}\n\n{{/* Initialize arguments */}}\n{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"link\" \"args\" . \"group\" \"partial\") -}}\n{{- if or $args.err $args.warnmsg -}}\n    {{- partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\" \"assets/link.html\" \n        \"warnid\"  \"warn-invalid-arguments\"\n        \"msg\"     \"Invalid arguments\"\n        \"details\" ($args.errmsg | append $args.warnmsg)\n        \"file\"    page.File\n    ) -}}\n    {{- $error = $args.err -}}\n{{- end -}}\n\n{{- $destination := or $args.href $args.destination \"\" -}}\n{{- $target := \"\" -}}\n{{- $rel := \"\" -}}\n{{- $text := $args.text -}}\n\n{{ if site.Params.env_bookshop_live }}\n    <a \n        {{- with $destination }} href=\"{{ . | safeURL }}\"{{ end -}}\n        {{ with $args.class }} class=\"{{ . }}\" {{ end -}}\n        {{ with $target }} target=\"{{ . }}\"{{ end -}}\n        {{ with $rel }} rel=\"{{ . }}\"{{ end -}}\n        {{ with $args.title }} title=\"{{ . }}\"{{ end -}}\n    >\n        {{- $text | safeHTML -}}\n    </a>\n{{ else }}\n    {{/* Initialize arguments */}}\n    {{- $u := urls.Parse $destination -}}\n    {{- if not $u.Scheme -}}\n        {{- if not (strings.Contains $destination \"/\") -}}\n            {{- with index site.Params.links $destination -}}\n                {{- $destination = . -}}\n            {{- end -}}\n        {{- else -}}\n            {{- $b := urls.Parse site.BaseURL -}}\n            {{- $destination = strings.TrimPrefix $b.Path $destination -}}\n            {{- $destination = path.Clean $destination -}}\n        {{- end -}}\n    {{- else -}}\n        {{- $destination = (strings.TrimPrefix (strings.TrimSuffix \"/\" site.BaseURL) $destination) -}}\n    {{- end -}}\n    {{- if not $destination }}{{ $destination = \"/\" }}{{ end -}}\n\n    {{- $cue := $args.cue | default site.Params.main.externalLinks.cue -}}\n    {{- $tab := $args.tab | default site.Params.main.externalLinks.tab -}}\n    {{- $externalLink := partial \"utilities/GetThemeIcon.html\" (dict \"id\" \"externalLink\" \"default\" \"fas up-right-from-square\") -}}\n    {{- $pretty := site.Params.main.internalLinks.pretty | default false }}\n    {{- $isExternal := or (ne (urls.Parse (absURL $destination)).Host (urls.Parse site.BaseURL).Host) $args.external -}}\n    {{- $isSpecial := and $u.Scheme (not (in (slice \"http\" \"https\") $u.Scheme)) }}\n    {{- $isLocal := hasPrefix $destination \"#\" -}}\n    {{- $anchor := \"\" -}}\n\n    {{/* Main code */}}\n    {{- if not $error -}}\n        {{- if $isSpecial -}}\n            {{- if not $text -}}\n                {{- $text = (urls.Parse (absURL $destination)).Host -}}\n            {{- end -}}\n        {{- else if $isExternal -}}\n            {{- if not $text -}}\n                {{- $text = (urls.Parse (absURL $destination)).Host -}}\n            {{- end -}}\n\n            {{- if $tab -}}\n                {{- $target = \"_blank\" -}}\n                {{- $rel = \"noopener noreferrer nofollow\" -}}\n            {{- end -}}\n\n            {{- if $cue -}}\n                {{- $suffix := partial \"assets/icon.html\" (dict \"icon\" $externalLink \"class\" \"fa-2xs\" \"spacing\" false) -}}\n                {{- $text = printf \"%s&nbsp;%s\" $text $suffix | safeHTML -}}\n            {{- end -}}\n        {{- else -}}\n            {{- if strings.Contains $destination \"#\" -}}\n                {{- $segments := split $destination \"#\" -}}\n                {{- if ne (len $segments) 2 }}\n                    {{ $errmsg = $errmsg | append (printf \"Malformed path, expected one anchor '#' only: %s\" $destination )}}\n                    {{- $error = true -}}\n                {{- else -}}\n                    {{- $destination = index $segments 0 -}}\n                    {{- $anchor = index $segments 1 -}}\n                {{- end -}}\n            {{- end -}}\n\n            {{- if not $isLocal -}}\n                {{- if not (index $args \"skip-validation\") -}}\n                    {{- $ref := partial \"utilities/GetPage.html\" (dict \"url\" $destination \"page\" $args.page) -}}\n                    {{- if not $ref -}}\n                        {{- $pageContext := \"\" -}}\n                        {{- with $args.page.File -}}\n                            {{- $pageContext = path.Dir (strings.TrimPrefix hugo.WorkingDir .Filename) -}}\n                        {{- end -}}\n                        {{- $isPageRes := fileExists (path.Join $pageContext $destination) -}}\n                        {{- $res := \"\" -}}\n                        {{- if $isPageRes -}}\n                            {{- $res = partial \"utilities/GetResource.html\" (dict \"url\" $args.destination \"page\" $args.page) -}}\n                        {{- end -}}\n                        {{- $isStatic := fileExists (path.Join \"static\" $destination) -}}\n                        {{- if and (not $res) (not $isStatic) -}}\n                            {{- $errmsg = $errmsg | append (printf \"Cannot find page or asset: '%s'\" $destination ) -}}\n                            {{- $error = true -}}\n                        {{- else if $res -}}\n                            {{- $destination = $res.RelPermalink -}}\n                        {{- else if $isStatic -}}\n                            {{- $destination = partial \"utilities/URLJoin.html\" (dict \"base\" \"/\" \"path\" $destination) -}}\n                        {{- end -}}\n                        {{- with $anchor }}{{ $destination = printf \"%s#%s\" (strings.TrimSuffix \"/\" $destination) . -}}{{ end -}}\n                    {{- end -}}\n\n                    {{- if and $ref (not $error) -}}\n                        {{- $destination = $ref.RelPermalink -}}\n                        {{- with $anchor }}{{ $destination = printf \"%s#%s\" (strings.TrimSuffix \"/\" $destination) . -}}{{ end -}}\n                    {{- end -}}\n\n                    {{- if not $text -}}\n                        {{- if $anchor }}{{ $text = $anchor }}{{ else }}{{ $text = $ref.LinkTitle }}{{ end -}}\n                    {{- end -}}\n                {{- else -}}\n                    {{/* Skip validation - just use destination as-is and derive text if needed */}}\n                    {{- with $anchor }}{{ $destination = printf \"%s%s#%s\" (strings.TrimSuffix \"/\" $destination) (cond $pretty \"/\" \"\") . -}}{{ end -}}\n                    {{- if not $text -}}\n                        {{- if $anchor }}{{ $text = $anchor }}{{ else }}{{ $text = $destination }}{{ end -}}\n                    {{- end -}}\n                {{- end -}}\n            {{- else -}}\n                {{- with $anchor -}}\n                    {{- $destination = printf \"#%s\" . -}}\n                    {{- if not $text }}{{ $text = . }}{{ end -}}\n                {{- end -}}\n            {{- end -}}\n\n            {{- if not $args.exact }}\n                {{- if not $args.case }}\n                    {{- $text = lower $text }}\n                {{- else if and site.Params.main.titleCase (not $args.page.Params.exact) }}\n                    {{- $text = title $text }}\n                {{- end -}}\n            {{- end -}}\n\n            {{- if and $pretty (not (hasSuffix $destination \"/\" )) (not (strings.Contains $destination \"#\")) -}}\n                {{- $destination = printf \"%s/\" $destination -}}\n            {{- end -}}\n\n            {{- if $args.force -}}\n                {{- if strings.Contains $destination \"?\" -}}\n                    {{- $destination = printf \"%s&force=true\" $destination -}}\n                {{- else -}}\n                    {{- $destination = printf \"%s?force=true\" $destination -}}\n                {{- end -}}\n            {{- end -}}\n        {{- end -}}\n    {{- end -}} \n\n    {{- if $error -}}\n        {{- partial \"utilities/LogErr.html\" (dict \n            \"partial\"  \"assets/link.html\" \n            \"msg\"      \"Invalid arguments\"\n            \"details\"  $errmsg\n            \"file\"     $args.page.File\n            \"position\" $args.position\n        ) -}}\n    {{- else -}}\n        <a \n            {{- with $destination }} href=\"{{ . | safeURL }}\"{{ end -}}\n            {{ with $args.class }} class=\"{{ . }}\" {{ end -}}\n            {{ with $target }} target=\"{{ . }}\"{{ end -}}\n            {{ with $rel }} rel=\"{{ . }}\"{{ end -}}\n            {{ with $args.title }} title=\"{{ . }}\"{{ end -}}\n        >\n            {{- $text | safeHTML -}}\n        </a>\n    {{- end -}}\n{{ end }}\n"
  },
  {
    "path": "layouts/_partials/assets/links.html",
    "content": "{{/* \n    Copyright © 2024 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{ $error := false }}\n\n{{/* Initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"links\" \"args\" . \"group\" \"partial\") }}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\" \"assets/links.html\" \n        \"warnid\"  \"warn-invalid-arguments\"\n        \"msg\"     \"Invalid arguments\"\n        \"details\" ($args.errmsg | append $args.warnmsg)\n        \"file\"    page.File\n    )}}\n    {{ $error = $args.err }}\n{{ end }}\n\n{{/* Initialize global arguments */}}\n{{- $breakpoint := page.Scratch.Get \"breakpoint\" -}}\n{{- $padding := partial \"utilities/GetPadding.html\" -}}\n\n{{- define \"_partials/links-content.html\" -}}\n    {{ $links := .links }}    \n    {{ $justify := .justify }}\n    {{ $type := .type }}\n    {{ $li := .li }}\n    {{ $order := \"last\" }}\n    {{ if and (eq $li true) (eq $type \"link\") }}{{ $order = \"first\" }}{{ $justify = \"start\" }}{{ end }}\n\n    {{ range $links }}\n        {{ $force := .force | default false }}\n        {{ $title := .title }}\n        {{ if and site.Params.env_bookshop_live (not $title) }}\n            {{ $title = \"-\" }}\n        {{ end }}\n\n        {{ $url := \"\" }}\n        {{ with .url }}\n            {{ $link := partial \"utilities/GetLink.html\" (dict \"page\" page \"href\" .) }}\n            {{ if not $link.error }}\n                {{ $url = $link.href }}\n            {{ else }}\n                {{ with page.File }}\n                    {{ warnf \"Error processing link on page '%s': %s\" (path.Join \"/content\" .Path) $link.msg }}\n                {{ else }}\n                    {{ warnf \"Error processing link: %s\" $link.msg }}\n                {{ end }}\n            {{ end }}\n        {{ end }}\n        {{ if (eq $li true) }}<div>{{ end }}\n\n        {{ if .download }}\n            {{ partial \"assets/download.html\" (dict \n                \"download\"    .download\n                \"title\"       $title\n                \"icon\"        .icon\n                \"outline\"     .outline\n                \"button-size\" \"md\"\n                \"order\"       (or .order $order)\n                \"justify\"     $justify\n                \"link-type\"   $type\n            ) }}\n        {{ else }}\n            {{ if $force }}\n                {{ $u := urls.Parse $url }}\n                {{ if and (gt (len $u.Query) 0) $u.Fragment }}\n                    {{ $fragments := split $url \"#\" }}\n                    {{ $url = printf \"%s&force=true#%s\" (index $fragments 0) (index $fragments 1) }}\n                {{ else if $u.Fragment }}\n                    {{ $fragments := split $url \"#\" }}\n                    {{ $url = printf \"%s?force=true#%s\" (index $fragments 0) (index $fragments 1) }}\n                {{ else if (gt (len $u.Query) 0) }}\n                    {{ $url = printf \"%s&force=true\" $url }}\n                {{ else }}\n                    {{ $url = printf \"%s?force=true\" $url }}\n                {{ end }}\n            {{ end }}\n\n            {{ partial \"assets/button.html\" (dict \n                \"href\"      $url\n                \"title\"     $title\n                \"icon\"      .icon\n                \"outline\"   .outline\n                \"order\"     (or .order $order)\n                \"justify\"   $justify\n                \"link-type\" $type\n            ) }}\n        {{ end }}\n\n        {{ if (eq $li true) }}</div>{{ end }}\n    {{ end }}\n{{ end }}\n\n<div class=\"hstack d-none d-{{ $breakpoint.current }}-block {{ if gt (len $args.links) 1 }} gap-5{{ end }} justify-content-{{ $args.align }} pt-{{ $padding.y }}\">\n    {{ partial \"links-content.html\" (dict \"links\" $args.links \"justify\" $args.justify \"type\" $args.linkType \"li\" false) }}\n</div>\n\n<div class=\"d-{{ $breakpoint.current }}-none pt-{{ $padding.y }}\">\n    {{ partial \"links-content.html\" (dict \"links\" $args.links \"justify\" $args.justify \"type\" $args.linkType \"li\" false) }}\n</div>\n"
  },
  {
    "path": "layouts/_partials/assets/live-card.html",
    "content": "<!-- \n    Copyright © 2024 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n-->\n\n<!-- Render card with live image support -->\n{{ $params := merge (dict \"hook\" \"assets/live-image.html\") . }}\n{{ partial \"assets/card.html\" $params }}\n"
  },
  {
    "path": "layouts/_partials/assets/live-image.html",
    "content": "<!-- \n    Copyright © 2024 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n-->\n\n{{- $error := false }}\n\n{{/* Initialize arguments */}}\n{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"image\" \"args\" . \"group\" \"partial\") -}}\n{{- if or $args.err $args.warnmsg -}}\n    {{- partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\" \"assets/live-image.html\" \n        \"warnid\"  \"warn-invalid-arguments\"\n        \"msg\"     \"Invalid arguments\"\n        \"details\" ($args.errmsg | append $args.warnmsg)\n        \"file\"    page.File\n    ) -}}\n{{- end -}}\n\n{{/* Initialize local arguments */}}\n{{- $class := printf \"%s img-fluid\" (or $args.class \"\") -}}\n\n{{/* Main code */}}\n{{- if not $args.err -}}\n    {{- $placeholder := partial \"assets/image.html\" (dict \n        \"page\"     $args.page\n        \"wrapper\"  $args.wrapper\n        \"class\"    $class\n        \"ratio\"    $args.ratio\n        \"portrait\" $args.portrait\n        \"anchor\"   $args.anchor\n        \"sizes\"    $args.sizes\n        \"src\"      (or $args.src $args.url)\n        \"title\"    $args.title\n        \"caption\"  $args.caption\n        \"plain\"    site.Params.env_bookshop_live\n        \"mode\"     $args.mode\n    ) }}\n\n    {{- if site.Params.env_bookshop_live -}}\n        {{- $backup := findRE \"src=\\\"(.+?)\\\"\" $placeholder 1 -}}\n        {{- if gt (len $backup) 0 -}}\n            {{- $backup = partial \"utilities/GetVal.html\" (index $backup 0) -}}\n        {{- else -}}\n            {{- $backup = $args.url -}}\n        {{- end -}}\n\n        {{- $absURL := partial \"utilities/GetTargetPath.html\" (dict \"page\" $args.page \"path\" $backup) | absURL -}}\n        {{- if $args.caption -}}\n            <figure {{ with $args.wrapper }}class=\"{{ . }}\"{{ end }}>\n        {{- else if $args.wrapper }}<div class=\"{{ $args.wrapper }}\">\n        {{- end -}}\n\n        <img src=\"{{ $absURL | safeHTMLAttr }}\" class=\"{{ $class }}{{ with $args.ratio }} ratio ratio-{{ . }}{{ end }}\"\n            {{- with $args.title }}alt=\"{{ . }}\"{{ end -}}\n            onerror=\"this.src='/img/placeholder.svg';this.onerror='';\">\n        {{- if $args.caption -}}\n                <figcaption class=\"figure-caption\">{{ $args.caption }}</figcaption>\n            </figure>\n        {{- else if $args.wrapper }}</div>\n        {{- end -}}\n    {{- else }}\n        {{- $placeholder | safeHTML -}}\n    {{- end -}}\n{{- end -}}"
  },
  {
    "path": "layouts/_partials/assets/live-pages.html",
    "content": "<!--\n    Copyright © 2024 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n-->\n\n{{/* Initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"live-pages\" \"args\" . \"group\" \"partial\") }}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\" \"assets/live-pages.html\" \n        \"warnid\"  \"warn-invalid-arguments\"\n        \"msg\"     \"Invalid arguments\"\n        \"details\" ($args.errmsg | append $args.warnmsg)\n        \"file\"    page.File\n    )}}\n{{ end }}\n\n{{/* Initialize local arguments */}}\n{{ $pages := slice }}\n{{ $total := 0 }}\n{{ $menu := slice }}\n{{ $reverse := $args.reverse | default false }}\n\n{{/* Main code */}}\n{{ if not $args.err }}\n    {{ if site.Params.env_bookshop_live }}\n        {{/* Define some dummy content as we cannot retrieve pages in live mode */}}\n        {{ range $index := seq (.max | default 3) }}\n            {{ $pages = $pages | append (dict \n                \"title\"       (printf \"Dummy %d\" $index)\n                \"description\" (printf \"content %d\" $index)\n                \"thumbnail\"   \"/img/placeholder.svg\"\n            )}}\n        {{ end }}\n        {{- if .reverse }}{{- $pages = sort $pages \"title\" \"desc\" -}}{{ end -}}\n    {{ else }}\n        {{/* Retrieve the relevant context page, either current page or page identified by section */}}\n        {{ $sectionPage := $args.page | default page }}\n        {{ if $args.section }}\n            {{ $sectionPage = site.GetPage $args.section }}\n            {{ if not $sectionPage }}\n                {{ warnf \"Cannot find section: %s\" $args.section }}\n            {{ end }}\n        {{ end }}\n\n        {{ if $sectionPage }}\n            {{ if eq $args.kind \"taxonomy\" }}\n                {{ $filter := $sectionPage.Params.filter }}\n                {{ with $filter }}\n                    {{ with index site.Taxonomies $args.section $filter }}\n                        {{ $pages = .Pages }}\n                    {{ end }}\n                {{ else }}\n                    {{ $pages = where site.Pages (printf \".Params.%s\" $args.section) \"!=\" nil }}\n                {{ end }}\n                {{ $total = len $pages }}\n            {{ else if eq $args.kind \"related\" }}\n                {{ if $sectionPage.Keywords }}\n                    {{ $keywords := keyVals \"tags\" $sectionPage.Keywords }}\n                    {{ $opts := dict \"namedSlices\" (slice $keywords) }}\n                    {{ $pages = site.RegularPages.Related $opts }}\n                    {{ $total = len $pages }}\n                {{ end }}\n            {{ else }}\n                {{/* Retrieve the immediate or all related pages (recursively), optionally filtering by tag or keyword */}}\n                {{ if $args.nested }}{{ $pages = $sectionPage.RegularPagesRecursive }}{{ else }}{{ $pages = $sectionPage.Pages }}{{ end }}\n                {{ $total = len $pages }}\n\n                {{ if and $args.tags (gt (len $args.tags) 0) }}\n                    {{ $tags := slice | append $args.tags }}\n                    {{ $pages = where $pages \"Params.tags\" \"intersect\" $tags }}\n                {{ end }}\n                {{ if and $args.keywords (gt (len $args.keywords) 0) }}\n                    {{ $keywords := slice | append $args.keywords }}\n                    {{ $pages = where $pages \"Keywords\" \"intersect\" $keywords }}\n                {{ end }}\n                {{ if and $args.categories (gt (len $args.categories) 0) }}\n                    {{ $categories := slice | append $args.categories }}\n                    {{ $pages = where $pages \"Params.categories\" \"intersect\" $categories }}\n                {{ end }}\n                {{/* Filter out pages with excludeFromSidebar param if exclude-filtered is true */}}\n                {{ if $args.excludeFiltered }}\n                    {{ $pages = where $pages \"Params.excludeFromSidebar\" \"!=\" true }}\n                {{ end }}\n            {{ end }}\n\n            {{/* Include the list pages if requested */}}\n            {{- $lists := slice -}}\n            {{ if or $args.includeList (eq $args.groupBy \"section\") }}\n                {{ range $pages }}\n                    {{ $lists = $lists | append .Parent | uniq }}\n                {{ end }}\n                {{/* Also include all descendant subsection pages (covers subsections with no regular children) */}}\n                {{- if $args.nested -}}\n                    {{- $walk := slice $sectionPage -}}\n                    {{- range seq 1 1000 -}}\n                        {{- if not $walk -}}{{- break -}}{{- end -}}\n                        {{- $lastIdx := sub (len $walk) 1 -}}\n                        {{- $current := index $walk $lastIdx -}}\n                        {{- $walk = $walk | first $lastIdx -}}\n                        {{- range $current.Sections -}}\n                            {{- $lists = $lists | append . -}}\n                            {{- $walk = $walk | append . -}}\n                        {{- end -}}\n                    {{- end -}}\n                    {{- $lists = $lists | uniq -}}\n                {{- end -}}\n                {{/* Filter list pages if exclude-filtered is set */}}\n                {{ if $args.excludeFiltered }}\n                    {{ $lists = where $lists \"Params.excludeFromSidebar\" \"!=\" true }}\n                {{ end }}\n                {{ $pages = $pages | append $lists }}\n            {{ end }}\n\n            {{/* Sort the pages as specified */}}\n            {{- $sortField := $args.sort | default \"title\" -}}\n\n            {{ if eq $args.groupBy \"section\" }}\n                {{- /* Build a hierarchical map: parent path -> slice of children */ -}}\n                {{- $grouped := dict -}}\n                {{- $rootPages := slice -}}\n\n                {{- range $page := $pages -}}\n                    {{- if $page.Parent -}}\n                        {{- $parentPath := $page.Parent.RelPermalink -}}\n                        {{- $childrenSlice := index $grouped $parentPath | default slice -}}\n                        {{- $grouped = merge $grouped (dict $parentPath ($childrenSlice | append $page)) -}}\n                    {{- else -}}\n                        {{- $rootPages = $rootPages | append $page -}}\n                    {{- end -}}\n                {{- end -}}\n\n                {{- /* If a section was specified, use that section page as the root */ -}}\n                {{- if $args.section -}}\n                    {{- $sectionPage := site.GetPage $args.section -}}\n                    {{- if $sectionPage -}}\n                        {{- $rootPages = slice | append $sectionPage -}}\n                    {{- end -}}\n                {{- end -}}\n\n                {{- /* Sort root pages first using Hugo's page collection methods */ -}}\n                {{ if $rootPages }}\n                    {{- if eq $sortField \"title\" -}}\n                        {{- $rootPages = $rootPages.ByTitle -}}                        \n                    {{- else if eq $sortField \"date\" -}}\n                        {{- $rootPages = $rootPages.ByDate -}}\n                    {{- else if eq $sortField \"weight\" -}}\n                        {{- $rootPages = $rootPages.ByWeight -}}\n                    {{- else if eq $sortField \"linkTitle\" -}}\n                        {{- $rootPages = $rootPages.ByLinkTitle -}}\n                    {{- else if eq $sortField \"publishDate\" -}}\n                        {{- $rootPages = $rootPages.ByPublishDate -}}\n                    {{- else if eq $sortField \"lastmod\" -}}\n                        {{- $rootPages = $rootPages.ByLastmod -}}\n                    {{- else if eq $sortField \"expiryDate\" -}}\n                        {{- $rootPages = $rootPages.ByExpiryDate -}}\n                    {{- else if eq $sortField \"length\" -}}\n                        {{- $rootPages = $rootPages.ByLength -}}\n                    {{- else -}}\n                        {{/* Use .ByParam for custom parameters - also returns pages.Pages collection */}}\n                        {{- $rootPages = $rootPages.ByParam $sortField -}}\n                    {{- end -}}\n                    {{- if $reverse }}{{ $rootPages = $rootPages.Reverse }}{{ end -}}\n                {{ end }}\n\n                {{- /* Process depth-first (pre-order): use a stack to traverse */ -}}\n                {{- $result := slice -}}\n                {{- $stack := slice -}}\n\n                {{- /* Initialize stack with root pages: always push in reverse for LIFO to pop in correct order */ -}}\n                {{- if $rootPages -}}\n                    {{- range $i := seq (len $rootPages) -}}\n                        {{- $idx := sub (len $rootPages) $i -}}\n                        {{- $page := index $rootPages $idx -}}\n                        {{- $stack = $stack | append $page -}}\n                    {{- end -}}\n                {{- end -}}\n\n                {{- range $iteration := seq 1 1000 -}}\n                    {{- /* Exit if stack is empty */ -}}\n                    {{- if not $stack -}}\n                        {{- break -}}\n                    {{- end -}}\n\n                    {{- /* Pop from stack */ -}}\n                    {{- $stackSize := len $stack -}}\n                    {{- $lastIdx := sub $stackSize 1 -}}\n                    {{- $current := index $stack $lastIdx -}}\n                    {{- $stack = $stack | first $lastIdx -}}\n\n                    {{- /* Add current page to result */ -}}\n                    {{- $result = $result | append $current -}}\n\n                    {{- /* Get and sort children using Hugo's page collection methods */ -}}\n                    {{- $pageKey := $current.RelPermalink -}}\n                    {{- $children := index $grouped $pageKey | default slice -}}\n                    {{- if $children -}}\n                        {{- if eq $sortField \"title\" -}}\n                            {{- $children = $children.ByTitle -}}\n                            {{- if $reverse }}{{ $children = $children.Reverse }}{{ end -}}\n                        {{- else if eq $sortField \"date\" -}}\n                            {{- $children = $children.ByDate -}}\n                            {{- if $reverse }}{{ $children = $children.Reverse }}{{ end -}}\n                        {{- else if eq $sortField \"weight\" -}}\n                            {{- $children = $children.ByWeight -}}\n                            {{- if $reverse }}{{ $children = $children.Reverse }}{{ end -}}\n                        {{- else if eq $sortField \"linkTitle\" -}}\n                            {{- $children = $children.ByLinkTitle -}}\n                            {{- if $reverse }}{{ $children = $children.Reverse }}{{ end -}}\n                        {{- else if eq $sortField \"publishDate\" -}}\n                            {{- $children = $children.ByPublishDate -}}\n                            {{- if $reverse }}{{ $children = $children.Reverse }}{{ end -}}\n                        {{- else if eq $sortField \"lastmod\" -}}\n                            {{- $children = $children.ByLastmod -}}\n                            {{- if $reverse }}{{ $children = $children.Reverse }}{{ end -}}\n                        {{- else if eq $sortField \"expiryDate\" -}}\n                            {{- $children = $children.ByExpiryDate -}}\n                            {{- if $reverse }}{{ $children = $children.Reverse }}{{ end -}}\n                        {{- else if eq $sortField \"length\" -}}\n                            {{- $children = $children.ByLength -}}\n                            {{- if $reverse }}{{ $children = $children.Reverse }}{{ end -}}\n                        {{- else -}}\n                            {{/* Use .ByParam for custom parameters - also returns pages.Pages collection */}}\n                            {{- $children = $children.ByParam $sortField -}}\n                            {{- if $reverse }}{{ $children = $children.Reverse }}{{ end -}}\n                        {{- end -}}\n                        {{- /* Push children to stack in reverse so LIFO pops in correct order */ -}}\n                        {{- range $i := seq (len $children) -}}\n                            {{- $idx := sub (len $children) $i -}}\n                            {{- $child := index $children $idx -}}\n                            {{- $stack = $stack | append $child -}}\n                        {{- end -}}\n                    {{- end -}}\n                {{- end -}}\n\n                {{- $pages = $result -}}\n\n                {{/* Build menu structure from sorted pages and hierarchy */}}\n                {{- range $rootPages -}}\n                    {{- $menuEntry := partial \"assets/helpers/sidebar-menu-entry\" (dict\n                        \"page\"      .\n                        \"grouped\"   $grouped\n                        \"sortField\" $sortField\n                        \"reverse\"   $reverse\n                    ) -}}\n                    {{- $menu = $menu | append $menuEntry -}}\n                {{- end -}}\n            {{ else }}\n                {{ if $pages }}\n                    {{- /* Use Hugo's page collection methods for regular sorting */ -}}\n                    {{- if eq $sortField \"title\" -}}\n                        {{- $pages = $pages.ByTitle -}}                        \n                    {{- else if eq $sortField \"date\" -}}\n                        {{- $pages = $pages.ByDate -}}\n                    {{- else if eq $sortField \"weight\" -}}\n                        {{- $pages = $pages.ByWeight -}}\n                    {{- else if eq $sortField \"linkTitle\" -}}\n                        {{- $pages = $pages.ByLinkTitle -}}\n                    {{- else if eq $sortField \"publishDate\" -}}\n                        {{- $pages = $pages.ByPublishDate -}}\n                    {{- else if eq $sortField \"lastmod\" -}}\n                        {{- $pages = $pages.ByLastmod -}}\n                    {{- else if eq $sortField \"expiryDate\" -}}\n                        {{- $pages = $pages.ByExpiryDate -}}\n                    {{- else if eq $sortField \"length\" -}}\n                        {{- $pages = $pages.ByLength -}}\n                    {{- else -}}\n                        {{/* Use .ByParam for custom parameters - also returns pages.Pages collection */}}\n                        {{- $pages = $pages.ByParam $sortField -}}\n                    {{- end -}}\n                    {{- if $reverse }}{{ $pages = $pages.Reverse }}{{ end -}}\n                {{ end }}\n                {{- /* For non-grouped sorts, use pages directly as menu */ -}}\n                {{- $menu = $pages | default slice -}}\n            {{ end }}\n        {{ end }}\n    {{ end }}\n{{ end }}\n\n{{ return (dict \"pages\" $pages \"menu\" $menu \"total\" $total \"reverse\" $reverse) }}"
  },
  {
    "path": "layouts/_partials/assets/menu-item.html",
    "content": "{{/* \n    Copyright © 2025 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{ $error := false }}\n\n{{/* Initialize arguments */}}\n{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"menu-item\" \"args\" . \"group\" \"partial\") -}}\n{{- if or $args.err $args.warnmsg -}}\n    {{- partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\" \"assets/menu-item.html\" \n        \"warnid\"  \"warn-invalid-arguments\"\n        \"msg\"     \"Invalid arguments\"\n        \"details\" ($args.errmsg | append $args.warnmsg)\n        \"file\"    page.File\n    ) -}}\n    {{- $error = $args.err -}}\n{{- end -}}\n\n<div class=\"menu-item d-flex {{ with $args.padding }}p-{{ . }}{{ end }} justify-content-between {{ $args.class }}\">\n    <div class=\"w-100 {{ if $args.menuEntry.Params.icon }}pe-2{{ end }}\">\n        {{ partial \"assets/helpers/navbar-item.html\" (dict \n            \"page\"       $args.page\n            \"menu-entry\" $args.menuEntry\n            \"class\"      \"stretched-link menu-link-header fs-md-5 fs-6 fw-bold\"\n            \"plain\"      true\n        )}}\n        {{- range $args.menuEntry.Children -}}\n            <div class=\"p-0\">\n                {{- partial \"assets/helpers/navbar-item.html\" (dict\n                    \"page\"       $args.page\n                    \"menu-entry\" .\n                    \"class\"      \"menu-link py-1\"\n                ) -}}\n            </div>\n        {{- end -}}\n    </div>\n    \n    {{ with $args.menuEntry.Params.icon }}\n        <div class=\"flex-shrink-1\">\n            {{- partial \"assets/card-icon.html\" (dict\n                \"icon\"         .\n                \"padding\"      0\n                \"icon-rounded\" $args.iconRounded\n                \"icon-style\"   $args.iconStyle\n                \"class\"        (printf \"align-self-end mt-1 col-auto\")\n            )}}\n        </div>\n    {{ end }}\n</div>\n"
  },
  {
    "path": "layouts/_partials/assets/modals.html",
    "content": "{{ with .Site.GetPage \"/_modals\" }}\n  {{ range .Pages }}\n    {{ .Content }}\n  {{ end }}\n{{ end }}"
  },
  {
    "path": "layouts/_partials/assets/nav-item.html",
    "content": "\n{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{/* Initialize arguments */}}\n{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"nav-item\" \"args\" . \"group\" \"partial\") -}}\n{{- if or $args.err $args.warnmsg -}}\n    {{- partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\" \"assets/nav-item.html\" \n        \"warnid\"  \"warn-invalid-arguments\"\n        \"msg\"     \"Invalid arguments\"\n        \"details\" ($args.errmsg | append $args.warnmsg)\n        \"file\"    page.File\n    ) -}}\n{{- end -}}\n\n{{/* Initialize local arguments */}}\n{{- $parentID := or $args.parentId $args.parentID -}}\n{{- $title := or $args.title $args.header -}}\n{{- $type := or $args.navitemType $args.item_type -}}\n{{- $illustration := \"\" -}}\n{{- if reflect.IsMap $args.illustration }}\n    {{ $illustration = partial $args.hook (dict\n        \"page\"         $args.page\n        \"image\"        $args.illustration.image\n        \"icon\"         $args.illustration.icon\n        \"anchor\"       $args.illustration.anchor\n        \"mode\"         $args.illustration.mode\n        \"ratio\"        $args.illustration.ratio\n        \"sizes\"        \"25vw\"\n        \"title\"        (T \"heroImage\")\n        \"wrapper\"      \"mx-auto mx-md-0\"\n        \"class\"        \"hero-image\"\n        \"image-overlay\" $args.imageOverlay\n    ) }}\n{{- else -}}\n    {{- $illustration = partial $args.hook (dict \"page\" $args.page \"image\" $args.illustration) -}}\n{{- end -}}\n\n{{/* Main code */}}\n{{- if not $args.err -}}\n    {{- if eq $type \"accordion\" -}}\n        <div class=\"accordion-item{{ if $args.show }} show{{ end }}{{ with $args.class }} {{ . }}{{ end }}\">\n            {{- with $title -}}\n                <h2 id=\"accordion-{{ $parentID }}-heading-{{ $args.id }}\" class=\"accordion-header m-0\">\n                    <button\n                        class=\"accordion-button collapsed {{ if $args.disabled }} text-secondary{{ end }}\"\n                        type=\"button\"\n                        data-bs-toggle=\"collapse\"\n                        data-bs-target=\"#accordion-{{ $parentID }}-item-{{ $args.id }}\"\n                        aria-expanded=\"false\"\n                        aria-controls=\"accordion-{{ $parentID }}-item-{{ $args.id }}\"\n                        {{ if $args.disabled }} disabled{{ end }}\n                    >\n                        {{- if $illustration -}}\n                            <div class=\"row\">\n                                <div class=\"col-3 col-sm-2 my-auto\">{{ $illustration | safeHTML }}</div>\n                                <div class=\"col-9 col-sm-10 fs-6 fs-sm-5 my-auto\">{{ . }}</div>\n                            </div>\n                        {{- else }}\n                            {{ . }}\n                        {{ end -}}\n                    </button>\n                </h2>\n            {{- end -}}\n            <div\n                id=\"accordion-{{ $parentID }}-item-{{ $args.id }}\"\n                class=\"accordion-collapse collapse{{ with $args.class }} {{ . }}{{ end }}\"\n                aria-labelledby=\"{{ $parentID }}-heading-{{ $args.id }}\"\n                data-bs-parent=\"#accordion-{{ $parentID }}\"\n            >\n                <div class=\"accordion-body\">{{ or $args.raw ($args.body | $args.page.RenderString) | safeHTML }}</div>\n            </div>\n        </div>\n    {{- else -}}\n        <div\n            id=\"{{ $parentID }}-{{ $args.id }}\" \n            class=\"tab-pane{{ if $args.show }} active{{ if $args.fade }} show{{ end }}{{ end }}{{ if $args.fade }} fade{{ end }}{{ with $args.class }} {{ . }}{{ end }}\"\n            role=\"tabpanel\"\n            aria-labelledby=\"{{ $parentID }}-btn-{{ $args.id }}\"\n            tabindex=\"0\"\n            data-has-content=\"{{ or (gt (len (or $args.raw \"\")) 0) (gt (len $args.body) 0 ) }}\"\n        >\n            {{ or $args.raw ($args.body | $args.page.RenderString) | safeHTML }}\n        </div>\n    {{- end -}}\n{{- end -}}"
  },
  {
    "path": "layouts/_partials/assets/nav.html",
    "content": "{{/*\n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{- $error := false -}}\n\n{{- define \"_partials/inline/nav-dropdown.html\" -}}\n    {{ $id := .id }}\n    {{ $class := .class }}\n    {{ $titles := .titles }}\n    {{ $wrap := .wrap }}\n\n    <div id=\"dropdown-{{ $id }}\" class=\"dropdown panel-dropdown {{ $class }}\">\n    <a class=\"link-secondary dropdown-toggle\" type=\"button\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\">\n        {{ cond (gt (len $titles) 0) (index $titles 0) (T \"sectionMenu\") }}\n    </a>\n        <ul class=\"dropdown-menu\">\n            {{- range $index, $item := $titles -}}\n                {{ $itemID := printf \"%s-btn-%d\" $id $index -}}\n                {{- $show := eq $index 0 -}}\n                <li>\n                    <a class=\"dropdown-item {{ if not $wrap }} text-nowrap{{ end }}{{ if $show }} active{{ end }}\"\n                    data-link=\"#{{ $id }}-btn-{{ $index }}\" type=\"button\">{{ $item }}</a>\n                </li>\n            {{ end }}\n        </ul>\n    </div>\n{{- end -}}\n\n{{/* Initialize arguments */}}\n{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"nav\" \"args\" . \"group\" \"partial\") -}}\n{{- if or $args.err $args.warnmsg -}}\n    {{- partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict\n        \"partial\" \"assets/nav.html\"\n        \"warnid\"  \"warn-invalid-arguments\"\n        \"msg\"     \"Invalid arguments\"\n        \"details\" ($args.errmsg | append $args.warnmsg)\n        \"file\"    page.File\n    ) -}}\n    {{- $error = $args.err -}}\n{{- end -}}\n\n{{/* Initialize global arguments */}}\n{{- $padding := partial \"utilities/GetPadding.html\" -}}\n{{- $breakpoint := partial \"utilities/GetBreakpoint.html\" -}}\n\n{{/* Initialize local arguments */}}\n{{- $page := $args.page -}}\n{{- $id := $args.id | default \"0\" -}}\n{{- $type := or $args.tabType $args.type -}}\n{{- $wrap := $args.wordWrap -}}\n{{- $isBtnGroup := eq $type \"buttons\" -}}\n{{- $isVertical := $args.vertical -}}\n{{- $align := cond (not $isVertical) $args.align \"\" -}}\n{{- $controlsPlacement := cond (not $isVertical) (or $args.controlsPlacement \"top\") \"\" -}}\n{{- $alignClass := cond (eq $align \"center\") \" justify-content-center\" (cond (eq $align \"end\") \" justify-content-end\" \"\") -}}\n{{- $titles := slice -}}\n{{- range $args.list }}{{ $titles = $titles | append .Title }} {{ end -}}\n{{- if reflect.IsSlice $args.navTitles }}{{ $titles = $titles | append $args.navTitles }}{{ end -}}\n{{- $icons := $args.navIcons -}}\n{{- $itemAttrs := $args.navItemAttrs -}}\n\n{{/* Tab-content class — spacing depends on type and controls-placement.\n     tabs/callout: border acts as the visual separator, no margin needed.\n     vertical:     left margin to offset from the vertical nav rail.\n     all others:   top margin when controls are above (default). */}}\n{{- $tabContentSpacing := \"\" -}}\n{{- if $isVertical -}}\n    {{- $tabContentSpacing = printf \"ms-%s-3\" $breakpoint.current -}}\n{{- else if and (not (in (slice \"tabs\" \"callout\") $type)) (ne $controlsPlacement \"bottom\") -}}\n    {{- $tabContentSpacing = \"mt-3\" -}}\n{{- end -}}\n{{- $tabContentClass := printf \"tab-content %s%s\" (cond (in (slice \"tabs\" \"callout\") $type) \"border p-3 bg-body \" \"\") $tabContentSpacing -}}\n\n{{/* Main code */}}\n{{- if not $error -}}\n<div class=\"col col-12 col-{{ $breakpoint.current }}-{{ $args.width }} mx-auto\">\n    {{- if $isVertical }}<div class=\"d-{{ if $args.responsive }}{{ $breakpoint.current }}{{ end }}-flex align-items-start\">{{ end -}}\n\n    {{/* Responsive dropdown (standard nav types only, controls-top position) */}}\n    {{- if and $args.responsive (not $isBtnGroup) (ne $controlsPlacement \"bottom\") -}}\n        {{ partial \"inline/nav-dropdown.html\" (dict\n            \"id\"     $id\n            \"class\"  (printf \"d-%s-none py-%d\" $breakpoint.current $padding.y)\n            \"titles\" $titles\n            \"wrap\"   $wrap\n        ) }}\n    {{- end -}}\n\n    {{/* Tab content — rendered first when controls-placement=below */}}\n    {{- if eq $controlsPlacement \"bottom\" -}}\n    <div class=\"{{ $tabContentClass }}\">\n        {{- $args.navItems | safeHTML -}}\n    </div>\n    {{- end -}}\n\n    {{/* Nav controls */}}\n    <div class=\"{{ if $args.responsive }}d-none d-{{ $breakpoint.current }}-block{{ end }}{{ if eq $controlsPlacement \"bottom\" }} mt-3{{ end }}\">\n    {{- if $isBtnGroup -}}\n        {{/* buttons tab-type */}}\n        <div class=\"btn-group{{ $alignClass }}\" role=\"tablist\"\n            {{- range $key, $val := $args.attributes }} {{ printf \"%s=%q\" $key $val | safeHTMLAttr }}{{ end -}}\n        >\n            {{- range $index, $item := $titles -}}\n                {{- $itemID := printf \"%s-btn-%d\" $id $index -}}\n                {{- $show := eq $index 0 -}}\n                {{- if $args.navShow }}{{- $show = eq $args.navShow $itemID -}}{{ end -}}\n                {{- $disabled := in $args.navDisabled $itemID -}}\n                {{- $itemIcon := index $icons $index -}}\n                {{- $itemAttrMap := index $itemAttrs $index -}}\n                <button\n                    type=\"button\"\n                    class=\"btn btn-outline-primary{{ if $show }} active{{ end }}{{ if $disabled }} disabled{{ end }}\"\n                    id=\"{{ $itemID }}\"\n                    data-bs-toggle=\"tab\"\n                    data-bs-target=\"#{{ $id }}-{{ $index }}\"\n                    role=\"tab\"\n                    aria-controls=\"{{ $id }}-{{ $index }}\"\n                    aria-selected=\"{{ if $show }}true{{ else }}false{{ end }}\"\n                    {{- if $itemIcon }} title=\"{{ $item }}\" aria-label=\"{{ $item }}\"{{ else if $item }} aria-label=\"{{ $item }}\"{{ end -}}\n                    {{- range $key, $val := $itemAttrMap }} {{ printf \"%s=%q\" $key $val | safeHTMLAttr }}{{ end -}}\n                >\n                    {{- if $itemIcon -}}\n                        {{- partial \"assets/icon.html\" (dict \"icon\" $itemIcon \"spacing\" false) -}}\n                    {{- else -}}\n                        {{ $item }}\n                    {{- end -}}\n                </button>\n            {{- end -}}\n        </div>\n    {{- else -}}\n        {{/* Standard nav (pills, tabs, underline, callout) */}}\n        <ul\n            class=\"nav nav-panel{{ with $type }} nav-{{ . }}{{ end -}}{{ $alignClass }}{{ with $args.class }} {{ . }}{{ end }}{{ if $isVertical }} flex-column{{ end }} tabs-dropdown\"\n            id=\"nav-{{ $id }}\"\n            role=\"tablist\"\n            {{- if $isVertical }} aria-orientation=\"vertical\"{{ end -}}\n            {{- range $key, $val := $args.attributes }} {{ printf \"%s=%q\" $key $val | safeHTMLAttr }}{{ end }}\n            data-companion=\"dropdown-{{ $id }}\"\n        >\n            {{- range $index, $item := $titles -}}\n                {{ $itemID := printf \"%s-btn-%d\" $args.id $index -}}\n                {{- $show := eq $index 0 -}}\n                {{- if $args.navShow }}{{ $show = eq $args.navShow $itemID }}{{ end -}}\n                {{- $disabled := in $args.navDisabled $itemID -}}\n                <li class=\"nav-item\" role=\"presentation\">\n                    <button\n                        class=\"nav-link{{ if not $wrap }} text-nowrap{{ end }}{{ if $show }} active{{ end }}{{ if $disabled }} disabled{{ end }}\"\n                        id=\"{{ $itemID }}\"\n                        data-bs-toggle=\"pill\"\n                        data-bs-target=\"#{{ $id }}-{{ $index }}\"\n                        type=\"button\"\n                        role=\"tab\"\n                        aria-controls=\"{{ $id }}-{{ $index }}\"\n                        aria-selected=\"{{ if eq $index 0 }}true{{ else }}false{{ end }}\"\n                    >\n                        {{ $item }}\n                    </button>\n                </li>\n            {{ end -}}\n        </ul>\n    {{- end -}}\n    </div>\n\n    {{/* Tab content — rendered after controls by default (controls-placement=top) */}}\n    {{- if ne $controlsPlacement \"bottom\" -}}\n    <div class=\"{{ $tabContentClass }}\">\n        {{- $args.navItems | safeHTML -}}\n    </div>\n    {{- end -}}\n\n    {{/* Responsive dropdown (standard nav types only, controls-below position) */}}\n    {{- if and $args.responsive (not $isBtnGroup) (eq $controlsPlacement \"bottom\") -}}\n        {{ partial \"inline/nav-dropdown.html\" (dict\n            \"id\"     $id\n            \"class\"  (printf \"d-%s-none py-%d\" $breakpoint.current $padding.y)\n            \"titles\" $titles\n            \"wrap\"   $wrap\n        ) }}\n    {{- end -}}\n\n    {{- if $isVertical }}</div>{{ end -}}\n</div>\n{{- end -}}\n"
  },
  {
    "path": "layouts/_partials/assets/navbar.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{/* TODO: consider to drop style arg */}}\n\n{{- define \"_partials/inline/divider.html\" -}}\n    {{- $breakpoint := .breakpoint -}}\n    <li class=\"nav-item py-2 py-md-1 col-12 col-md-auto d-none d-{{ $breakpoint }}-block me-auto\">\n        <div class=\"vr d-none d-md-flex h-100 mx-md-2\"></div>\n    </li>\n    <li><hr class=\"dropdown-divider-bg\"></li>\n{{- end -}}\n\n{{/* Initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"navbar\" \"args\" . \"group\" \"partial\") }}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\" \"assets/navbar.html\" \n        \"warnid\"  \"warn-invalid-arguments\"\n        \"msg\"     \"Invalid arguments\"\n        \"details\" ($args.errmsg | append $args.warnmsg)\n        \"file\"    page.File\n    )}}\n{{ end }}\n\n{{/* Initialize global variables */}}\n{{- $padding := partial \"utilities/GetPadding.html\" (dict \"section\" \"navigation\") -}}\n{{- $searchArgs := cond (in $args.default \"search\") (dict) (dict \"search\" $args.search) -}}\n{{- $search := partial \"utilities/GetSearchConfig.html\" $searchArgs -}}\n\n{{- $fs := site.Params.navigation.fontsizeCollapsed | default 6 -}}\n{{- $navbarOverflow := \"fas ellipsis\" -}}\n{{- $langIcon := \"fas globe\" -}}\n{{- $navbarOverflow := partial \"utilities/GetThemeIcon.html\" (dict \"id\" \"navbarOverflow\" \"default\" \"fas ellipsis\") -}}\n{{- $navbarLanguage := partial \"utilities/GetThemeIcon.html\" (dict \"id\" \"navbarLanguage\" \"default\" \"fas globe\") -}}\n{{- with site.Params.navigation.language.icon -}}\n    {{- partial \"utilities/LogWarn.html\" (dict\n        \"partial\" \"assets/navbar.html\"\n        \"warnid\"  \"warn-deprecated-icons\"\n        \"msg\"     \"Deprecated icon params detected; migrate to the [icons] section in params.toml\"\n        \"details\" (slice \"Replace 'navigation.language.icon' with 'icons.navbarLanguage'\")\n    ) -}}\n{{- end -}}\n\n{{/* Initialize local arguments */}}\n{{- $absoluteURL := site.Params.main.canonifyAssetsURLs | default false -}}\n{{- $pretty := site.Params.main.internalLinks.pretty | default false }}\n{{- $id := $args.id | default (printf \"navbar-%d\" 0) -}}\n{{- $page := $args.page -}}\n{{- $baseURL := $page.Scratch.Get \"baseURL\" -}}\n{{- $breakpoint := or $args.breakpoint $args.size }}\n\n{{- $defaultMenu := \"main\" -}}\n{{- $menuName := (or $args.menu $args.menus) | default $defaultMenu }}\n{{- $menu := index site.Menus $menuName -}}\n{{- if or (ne (printf \"%T\" $menu) \"navigation.Menu\") (ne (index $menu 0).Menu $menuName) -}}\n    {{- if ne $menuName $defaultMenu }}\n        {{- errorf \"partial [assets/navbar.html] - Invalid value for param 'menus': %s\" $menuName -}}\n    {{- end -}}\n{{- end -}}\n\n{{- $overlay := $args.overlay | default false -}}\n{{- $overlayMode := $args.overlayMode | default \"dark\" -}}\n{{- if eq $overlayMode \"none\" }}{{ $overlayMode = \"\" }}{{ end }}\n{{- $color := $args.color | default \"\" -}}\n{{- $enableDarkMode := .mode | default (or site.Params.main.enableDarkMode site.Params.main.colorMode.enabled) -}}\n{{- $modes := site.Params.main.modes | default (slice \"light\" \"dark\") -}}\n{{ if isset site.Params.main \"enabledarkmode\" }}\n    {{ warnf \"site parameter %q: deprecated in v%s, use %q instead\" \"main.enableDarkMode\" \"1.12.0\" \"main.colorMode.enabled\" }}\n{{ end }}\n{{ if isset site.Params.main \"modes\" }}\n    {{ warnf \"site parameter %q: deprecated in v%s, use %q instead\" \"main.modes\" \"1.12.0\" \"main.colorMode.modes\" }}\n{{ end }}\n\n\n{{- $enableVersions := false -}}\n{{ $list := site.Params.docs.releases }}\n{{ if $list }}\n    {{- $enableVersions = gt (len $list ) 1 -}}\n{{ end }}\n\n{{- $enableLanguage := or $page.IsTranslated hugo.IsMultilingual -}}\n{{- $horizontal := default false site.Params.navigation.horizontal -}}\n\n{{- $title := site.Title -}}\n{{- if $args.title -}}\n    {{- $title = $args.title -}}\n{{- end -}}\n\n{{ $logo := \"\" }}\n{{ $mode := index site.Params.navigation \"logo-mode\" | default false }}\n{{ if (not (in $args.default \"logo-mode\")) }}\n    {{ $mode = $args.logoMode }}\n{{ end }}\n\n{{ $align := index site.Params.navigation \"logo-align\" | default \"center\" }}\n{{ if (not (in $args.default \"logo-align\")) }}\n    {{ $align = $args.logoAlign }}\n{{ end }}\n\n{{ if not $args.title }}\n    {{ with $args.logo | default site.Params.navigation.logo }}\n        {{ $height := index site.Params.navigation \"logo-height\" | default 30 }}\n        {{ $class := cond (eq $align \"start\") \"my-auto\" \"m-auto\" }}\n        {{ $logo = partial \"assets/image.html\" (dict \n            \"src\"          .\n            \"loading\"      \"eager\"\n            \"title\"        $title\n            \"image-height\" $height\n            \"mode\"         $mode\n            \"class\"        $class\n        ) }}\n    {{ end }}\n{{ end }}\n\n{{- $class := $args.class -}}\n\n{{- $contrast := false -}}\n{{- if in (slice \"primary\" \"secondary\" \"success\" \"danger\") $color }}{{ $contrast = true }}{{ end -}}\n\n{{- $flex := false }}\n{{ if gt (where $menu \"Params.spacing\" true | len) 0 }}\n    {{ $flex = true }}\n{{ end }}\n\n{{/* Main code */}}\n<div class=\"container-fluid {{ if $args.fixed }}fixed-top{{ else if $overlay }}navbar-overlay{{ end }} p-0{{ with $class }} {{ . }}{{ end }}\">\n    {{- partial \"assets/page-alert.html\" (dict \"page\" $page) -}}\n    <nav class=\"navbar px-{{ $padding.x }} py-{{ $padding.y }} navbar-fs-{{ $fs }} navbar-{{ $args.breakpoint }}-fs\n        {{- if not $overlay }}{{ with $color }} bg-{{ . }}{{ end }}{{ end -}}\n        {{ if $args.fixed }} navbar-fixed-top{{ end }} navbar-expand-{{ $args.breakpoint -}}\n        {{ if $contrast }} navbar-contrast{{ end }}\"\n        {{ if $overlay }}\n        data-bs-theme=\"{{ $overlayMode }}\"\n        {{ if $args.fixed }}data-bs-overlay=\"{{ $overlayMode }}\"{{ end }}\n        {{ if $color }}data-navbar-color=\"{{ $color }}\"{{ end }}\n        {{ end }}\n        {{ with $args.transparent }}data-transparent=\"{{ . }}\"{{ end }}\n        >\n        <div class=\"container-xxl p-0\">\n            <div class=\"d-flex navbar-container\">\n                {{/* Insert sidebar toggler or placeholder when applicable */}}\n                {{ $sidebar := $page.Scratch.Get \"sidebar\" }}\n                {{- if or $sidebar (eq $align \"center\") -}}\n                    <div class=\"d-flex align-items-center\">\n                        {{- if $sidebar -}}\n                            <button class=\"navbar-toggler collapsed p-0 mx-auto fw-30\" type=\"button\" data-bs-toggle=\"offcanvas\"\n                                data-bs-target=\"#offcanvas-sidebar\" aria-controls=\"offcanvas-sidebar\" aria-label=\"{{ T \"toggleSidebar\" }}\">\n                                {{- partial \"assets/icon.html\" (dict \"icon\" $navbarOverflow \"class\" \"fa-fw\" \"spacing\" false) -}}\n                            </button>\n                        {{- else if eq $align \"center\" -}}\n                            {{/* Insert invisible sidebar toggler to center logo correctly on smaller screens */}}\n                            <button class=\"navbar-toggler collapsed p-0 mx-auto invisible fw-30\" type=\"button\">\n                                {{- partial \"assets/icon.html\" (dict \"icon\" $navbarOverflow \"class\" \"fa-fw\" \"spacing\" false) -}}\n                            </button>\n                        {{- end -}}\n                    </div>\n                {{ end }}\n        \n                {{/* Insert the brand logo or name */}}\n                <div class=\"width-100 d-flex align-items-center width-{{ $args.breakpoint }}-auto\">\n                    <a class=\"navbar-brand{{ if eq $align \"center\" }} mx-auto{{ end }}\" href=\"{{ site.Home.RelPermalink }}\" aria-label=\"{{ T \"home\" }}\">\n                        {{- with $logo -}}{{ . }}{{- else -}}<div class=\"p-0 navbar-title-{{ $align }} fw-bold h-100\">{{ $title }}</div>{{- end -}}\n                    </a>\n                </div>\n        \n                {{/* Insert main navigation toggler */}}\n                <div class=\"d-flex align-items-center\">\n                    <button class=\"navbar-toggler main-nav-toggler collapsed p-0\" type=\"button\" data-bs-toggle=\"collapse\"\n                        data-bs-target=\"#{{ $id }}-collapse\"\n                        aria-controls=\"{{ $id }}\" aria-expanded=\"false\" aria-label=\"{{ T \"toggleMainNav\" }}\">\n                        <span class=\"toggler-icon top-bar emphasis\"></span>\n                        <span class=\"toggler-icon middle-bar emphasis\"></span>\n                        <span class=\"toggler-icon bottom-bar emphasis\"></span>\n                    </button>\n                </div>\n            </div>\n    \n            <div class=\"navbar-collapse collapse\" id=\"{{ $id }}-collapse\">\n                {{/* Insert search input */}}\n                {{- if and $search.enabled (not $search.modal) }}\n                    {{ partial \"assets/search-input.html\" (dict \"class\" (printf \"mt-4 mt-%s-0 me-%s-3\" $args.breakpoint $args.breakpoint)) }}\n                {{ end -}}\n\n                {{- partial \"page/navbar-extra.html\" (dict \"page\" $page \"breakpoint\" $args.breakpoint) -}}\n                \n                <ul class=\"navbar-nav navbar-nav-scroll {{ if $flex }}d-flex flex-grow-1{{ else }}ms-auto{{ end }}\">\n                    {{/* Render top-menu items (maximum depth of 2) */}}\n                    {{- partial \"assets/helpers/navbar-render-menu.html\" (dict\n                        \"page\"       $page\n                        \"menu\"       $menu\n                        \"collapsed\"  $args.collapsed\n                        \"horizontal\" $horizontal\n                        \"breakpoint\" $args.breakpoint\n                        \"control\"    false\n                    ) }}\n    \n                    {{/* Insert divider if applicable */}}\n                    {{- if and $menu (or $enableLanguage $enableVersions) -}}\n                        {{ partial \"inline/divider.html\" (dict \"breakpoint\" $args.breakpoint) }}\n                    {{- end -}}\n    \n                    {{/* Insert version switcher */}}\n                    {{- if $enableVersions -}}\n                        {{- partial \"assets/helpers/navbar-versions.html\" (dict \n                            \"page\"       $page\n                            \"breakpoint\" $args.breakpoint\n                            \"collapsed\"  true\n                            \"id\"         .id\n                            \"baseURL\"    $baseURL\n                            \"fs\"         $fs\n                        ) -}}\n                        {{- partial \"assets/helpers/navbar-versions.html\" (dict\n                            \"page\"       $page\n                            \"breakpoint\" $args.breakpoint\n                            \"collapsed\"  false\n                            \"id\"         .id\n                            \"baseURL\"    $baseURL\n                    ) -}}\n                    {{- end -}}\n\n                    {{/* Insert language switcher if applicable */}}\n                    {{- if $enableLanguage -}}\n                        {{ partial \"assets/helpers/navbar-languages.html\" (dict\n                            \"page\"       $page\n                            \"baseURL\"    $baseURL\n                            \"breakpoint\" $breakpoint\n                            \"pretty\"     $pretty                        \n                            \"icon\"       $langIcon\n                        )}}\n                    {{- end -}}\n\n                    {{/* Insert divider if applicable */}}\n                    {{ $hasControls := gt (len (where $menu \"Params.control\" true)) 0 }}\n                    {{ if and (or $enableLanguage $enableVersions) (or $enableDarkMode (and $search.enabled $search.modal) $hasControls) }}\n                        {{ partial \"inline/divider.html\" (dict \"breakpoint\" $args.breakpoint) }}\n                    {{ end }}\n                                    \n                    {{/* Insert color mode switcher */}}\n                    {{- if $enableDarkMode -}}\n                        {{- partial \"assets/helpers/navbar-mode.html\" (dict\n                            \"breakpoint\" $args.breakpoint\n                            \"collapsed\"  true\n                            \"id\"         .id\n                            \"toggle\"     (site.Params.main.colorMode.toggle)\n                        ) -}}\n                    {{- end -}}\n\n                    {{/* Insert modal search button */}}\n                    {{- if and $search.enabled $search.modal }}\n                        {{ $searchItem := dict \"Name\" (T \"ui_search\") \"Menu\" \"Main\" \"Pre\" $search.icon \"Params\" (dict \"icon\" true \"control\" true) }}\n                        {{- partial \"assets/helpers/navbar-item.html\" (dict\n                            \"menu-entry\" $searchItem\n                            \"page\"       $page\n                            \"modal\"      \"#search-modal\"\n                        ) -}}\n                    {{ end -}}\n\n                    {{/* Render custom controls */}}\n                    {{- partial \"assets/helpers/navbar-render-menu.html\" (dict\n                        \"page\"       $page\n                        \"menu\"       $menu\n                        \"collapsed\"  $args.collapsed\n                        \"horizontal\" $horizontal\n                        \"breakpoint\" $args.breakpoint\n                        \"control\"    true\n                    ) }}\n                </ul>\n            </div>\n        </div>\n    </nav>\n</div>\n"
  },
  {
    "path": "layouts/_partials/assets/page-alert.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{/* Initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"page-alert\" \"args\" . \"group\" \"partial\") }}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\" \"assets/page-alert.html\" \n        \"warnid\"  \"warn-invalid-arguments\"\n        \"msg\"     \"Invalid arguments\"\n        \"details\" ($args.errmsg | append $args.warnmsg)\n        \"file\"    page.File\n    )}}\n{{ end }}\n\n{{/* Initialize local arguments */}}\n{{- $pageAlertMsg := $args.page.Scratch.Get \"pageAlertMsg\" -}}\n{{- $pageAlertURL := $args.page.Scratch.Get \"pageAlertURL\" -}}\n{{- $version := $args.page.Scratch.Get \"version\" -}}\n\n{{/* Main code */}}\n{{- if and (not $args.err) $pageAlertMsg -}}\n    <div id=\"page-alert\" class=\"alert alert-primary alert-no-decoration fade show d-flex align-items-center small m-0 py-1\" data-page-alert-version=\"{{ $version }}\">\n        <a {{ with $pageAlertURL }}href=\"{{ . }}\"{{ end }} class=\"text-decoration-none flex-grow-1 text-center\">{{ $pageAlertMsg }}</a>\n        <button id=\"page-alert-btn-close\" type=\"button\" class=\"btn-close\" data-bs-dismiss=\"alert\" aria-label=\"{{ T \"close\" }}\"></button>\n    </div>\n{{- end -}}\n"
  },
  {
    "path": "layouts/_partials/assets/pagination.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n\n    This source code adapts the original partial as maintained by the Hugo repository. It introduces the\n    following modifications:\n     - Centered the pagination element\n     - Standardized validation of partial arguments\n     - Replaced previous / next navigation with text\n    \n    The original source code is available on:\n    https://github.com/gohugoio/hugo/blob/master/tpl/tplimpl/embedded/templates/pagination.html\n    Copyright 2022 The Hugo Authors. Licensed under the Apache License, Version 2.0.\n  */}}\n\n{{- define \"_partials/inline/pagination/default\" }}\n  {{- $paginationFirst := partial \"utilities/GetThemeIcon.html\" (dict \"id\" \"paginationFirst\" \"default\" \"fas angles-left\") -}}\n  {{- $paginationPrev := partial \"utilities/GetThemeIcon.html\" (dict \"id\" \"paginationPrev\" \"default\" \"fas angle-left\") -}}\n  {{- $paginationNext := partial \"utilities/GetThemeIcon.html\" (dict \"id\" \"paginationNext\" \"default\" \"fas angle-right\") -}}\n  {{- $paginationLast := partial \"utilities/GetThemeIcon.html\" (dict \"id\" \"paginationLast\" \"default\" \"fas angles-right\") -}}\n  {{- with .Paginator }}\n    {{- $currentPageNumber := .PageNumber }}\n\n    {{- with .First }}\n      {{- if ne $currentPageNumber .PageNumber }}\n      <li class=\"page-item\">\n        <a href=\"{{ .URL }}\" aria-label=\"{{ T \"paginationFirst\" }}\" class=\"page-link\" role=\"button\">\n          <span aria-hidden=\"true\">{{ partial \"assets/icon.html\" (dict \"icon\" $paginationFirst \"spacing\" false) }}</span>\n        </a>\n      </li>\n      {{- else }}\n      <li class=\"page-item disabled\">\n        <a aria-disabled=\"true\" aria-label=\"{{ T \"paginationFirst\" }}\" class=\"page-link\" role=\"button\" tabindex=\"-1\">\n          <span aria-hidden=\"true\">{{ partial \"assets/icon.html\" (dict \"icon\" $paginationFirst \"spacing\" false) }}</span>\n        </a>\n      </li>\n      {{- end }}\n    {{- end }}\n\n    {{- with .Prev }}\n      <li class=\"page-item\">\n        <a href=\"{{ .URL }}\" aria-label=\"{{ T \"paginationPrevious\" }}\" class=\"page-link\" role=\"button\">\n          <span aria-hidden=\"true\">{{ partial \"assets/icon.html\" (dict \"icon\" $paginationPrev \"spacing\" false) }}</span>\n        </a>\n      </li>\n    {{- else }}\n      <li class=\"page-item disabled\">\n        <a aria-disabled=\"true\" aria-label=\"{{ T \"paginationPrevious\" }}\" class=\"page-link\" role=\"button\" tabindex=\"-1\">\n          <span aria-hidden=\"true\">{{ partial \"assets/icon.html\" (dict \"icon\" $paginationPrev \"spacing\" false) }}</span>\n        </a>\n      </li>\n    {{- end }}\n\n    {{- $slots := 5 }}\n    {{- $start := math.Max 1 (sub .PageNumber (math.Floor (div $slots 2))) }}\n    {{- $end := math.Min .TotalPages (sub (add $start $slots) 1) }}\n    {{- if lt (add (sub $end $start) 1) $slots }}\n      {{- $start = math.Max 1 (add (sub $end $slots) 1) }}\n    {{- end }}\n\n    {{- range $k := seq $start $end }}\n      {{- if eq $.Paginator.PageNumber $k }}\n      <li class=\"page-item active\">\n        <a aria-current=\"page\" aria-label=\"Page {{ $k }}\" class=\"page-link\" role=\"button\">{{ $k }}</a>\n      </li>\n      {{- else }}\n      <li class=\"page-item\">\n        <a href=\"{{ (index $.Paginator.Pagers (sub $k 1)).URL }}\" aria-label=\"Page {{ $k }}\" class=\"page-link\" role=\"button\">{{ $k }}</a>\n      </li>\n      {{- end }}\n    {{- end }}\n\n    {{- with .Next }}\n      <li class=\"page-item\">\n        <a href=\"{{ .URL }}\" aria-label=\"{{ T \"paginationNext\" }}\" class=\"page-link\" role=\"button\">\n          <span aria-hidden=\"true\">{{ partial \"assets/icon.html\" (dict \"icon\" $paginationNext \"spacing\" false) }}</span>\n        </a>\n      </li>\n    {{- else }}\n      <li class=\"page-item disabled\">\n        <a aria-disabled=\"true\" aria-label=\"{{ T \"paginationNext\" }}\" class=\"page-link\" role=\"button\" tabindex=\"-1\">\n          <span aria-hidden=\"true\">{{ partial \"assets/icon.html\" (dict \"icon\" $paginationNext \"spacing\" false) }}</span>\n        </a>\n      </li>\n    {{- end }}\n\n    {{- with .Last }}\n      {{- if ne $currentPageNumber .PageNumber }}\n      <li class=\"page-item\">\n        <a href=\"{{ .URL }}\" aria-label=\"{{ T \"paginationLast\" }}\" class=\"page-link\" role=\"button\">\n          <span aria-hidden=\"true\">{{ partial \"assets/icon.html\" (dict \"icon\" $paginationLast \"spacing\" false) }}</span>\n        </a>\n      </li>\n      {{- else }}\n      <li class=\"page-item disabled\">\n        <a aria-disabled=\"true\" aria-label=\"{{ T \"paginationLast\" }}\" class=\"page-link\" role=\"button\" tabindex=\"-1\">\n          <span aria-hidden=\"true\">{{ partial \"assets/icon.html\" (dict \"icon\" $paginationLast \"spacing\" false) }}</span>\n        </a>\n      </li>\n      {{- end }}\n    {{- end }}\n  {{- end }}\n{{- end -}}\n\n{{- define \"_partials/inline/pagination/terse\" }}\n  {{- $paginationFirst := partial \"utilities/GetThemeIcon.html\" (dict \"id\" \"paginationFirst\" \"default\" \"fas angles-left\") -}}\n  {{- $paginationPrev := partial \"utilities/GetThemeIcon.html\" (dict \"id\" \"paginationPrev\" \"default\" \"fas angle-left\") -}}\n  {{- $paginationNext := partial \"utilities/GetThemeIcon.html\" (dict \"id\" \"paginationNext\" \"default\" \"fas angle-right\") -}}\n  {{- $paginationLast := partial \"utilities/GetThemeIcon.html\" (dict \"id\" \"paginationLast\" \"default\" \"fas angles-right\") -}}\n\n  {{- with .Paginator }}\n    {{- $currentPageNumber := .PageNumber }}\n\n    {{- with .First }}\n      {{- if ne $currentPageNumber .PageNumber }}\n      <li class=\"page-item\">\n        <a href=\"{{ .URL }}\" aria-label=\"{{ T \"paginationFirst\" }}\" class=\"page-link\" role=\"button\">\n          <span aria-hidden=\"true\">{{ partial \"assets/icon.html\" (dict \"icon\" $paginationFirst \"spacing\" false) }}</span>\n        </a>\n      </li>\n      {{- end }}\n    {{- end }}\n\n    {{- with .Prev }}\n      <li class=\"page-item\">\n        <a href=\"{{ .URL }}\" aria-label=\"{{ T \"paginationPrevious\" }}\" class=\"page-link\" role=\"button\">\n          <span aria-hidden=\"true\">{{ partial \"assets/icon.html\" (dict \"icon\" $paginationPrev \"spacing\" false) }}</span>\n        </a>\n      </li>\n    {{- end }}\n\n    {{- $slots := 3 }}\n    {{- $start := math.Max 1 (sub .PageNumber (math.Floor (div $slots 2))) }}\n    {{- $end := math.Min .TotalPages (sub (add $start $slots) 1) }}\n    {{- if lt (add (sub $end $start) 1) $slots }}\n      {{- $start = math.Max 1 (add (sub $end $slots) 1) }}\n    {{- end }}\n\n    {{- range $k := seq $start $end }}\n      {{- if eq $.Paginator.PageNumber $k }}\n      <li class=\"page-item active\">\n        <a aria-current=\"page\" aria-label=\"Page {{ $k }}\" class=\"page-link\" role=\"button\">{{ $k }}</a>\n      </li>\n      {{- else }}\n      <li class=\"page-item\">\n        <a href=\"{{ (index $.Paginator.Pagers (sub $k 1)).URL }}\" aria-label=\"Page {{ $k }}\" class=\"page-link\" role=\"button\">{{ $k }}</a>\n      </li>\n      {{- end }}\n    {{- end }}\n\n    {{- with .Next }}\n      <li class=\"page-item\">\n        <a href=\"{{ .URL }}\" aria-label=\"{{ T \"paginationNext\" }}\" class=\"page-link\" role=\"button\">\n          <span aria-hidden=\"true\">{{ partial \"assets/icon.html\" (dict \"icon\" $paginationNext \"spacing\" false) }}</span>\n        </a>\n      </li>\n    {{- end }}\n\n    {{- with .Last }}\n      {{- if ne $currentPageNumber .PageNumber }}\n      <li class=\"page-item\">\n        <a href=\"{{ .URL }}\" aria-label=\"{{ T \"paginationLast\" }}\" class=\"page-link\" role=\"button\">\n          <span aria-hidden=\"true\">{{ partial \"assets/icon.html\" (dict \"icon\" $paginationLast \"spacing\" false) }}</span>\n        </a>\n      </li>\n      {{- end }}\n    {{- end }}\n  {{- end }}\n{{- end -}}\n\n{{/* Initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"pagination\" \"args\" . \"group\" \"partial\") }}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\" \"assets/pagination.html\" \n        \"warnid\"  \"warn-invalid-arguments\"\n        \"msg\"     \"Invalid arguments\"\n        \"details\" ($args.errmsg | append $args.warnmsg)\n        \"file\"    page.File\n    )}}\n{{ end }}\n\n{{/* Main code */}}\n{{- if and (not $args.err) (gt $args.page.Paginator.TotalPages 1) }}\n  <nav aria-label=\"{{ T \"paginationNav\" }}\">\n    <ul class=\"pagination pagination-{{ $args.format }} justify-content-center\">\n      {{- partial (printf \"inline/pagination/%s\" $args.format) $args.page }}\n    </ul>\n  </nav>\n{{- end }}\n"
  },
  {
    "path": "layouts/_partials/assets/persona.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{/* Initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"persona\" \"args\" . \"group\" \"partial\") }}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\" \"assets/persona.html\" \n        \"warnid\"  \"warn-invalid-arguments\"\n        \"msg\"     \"Invalid arguments\"\n        \"details\" ($args.errmsg | append $args.warnmsg)\n        \"file\"    page.File\n    )}}\n{{ end }}\n\n{{/* Initialize local arguments */}}\n{{- $page := \"\" }}\n{{- if $args.path }}\n    {{- $page = site.GetPage $args.path }}\n    {{- if not $page }}\n        {{- errorf \"partial [assets/persona.html] - Cannot find page: %s\" $args.path -}}\n    {{- end }}\n{{- end }}\n\n{{- $title := $args.title -}}\n{{- $href := $args.href -}}\n{{- $content := $args.content -}}\n{{- $thumbnail := $args.thumbnail -}}\n{{- with $page -}}\n    {{- if not $title }}{{ $title = .Title }}{{ end -}}\n    {{- if not $href }}{{ $href = .RelPermalink  }}{{ end -}}\n    {{- if not $content }}{{ $content = .Content }}{{ end -}}\n    {{- if not $thumbnail }}\n        {{ if reflect.IsMap .Params.Thumbnail }}\n            {{ $thumbnail = .Params.Thumbnail.url }}\n        {{ else }}\n            {{ $thumbnail = .Params.Thumbnail }}\n        {{ end }}\n    {{ end -}}\n{{- end -}}\n\n{{- $tab := site.Params.main.externalLinks.tab -}}\n{{- $isExternal := ne (urls.Parse (absURL $href)).Host (urls.Parse site.BaseURL).Host -}}\n{{- $target := \"\" -}}\n{{- $rel := \"\" -}}\n{{- if and $isExternal $tab -}}\n    {{- $target = \"_blank\" -}}\n    {{- $rel = \"noopener noreferrer nofollow\" -}}\n{{- end -}}\n\n{{/* Inline partial to render the card's body */}}\n{{- define \"_partials/inline/persona-body.html\" -}}\n    {{- $title := .title -}}\n    {{- $content := .content -}}\n    \n    <div class=\"fs-3 mt-4\">{{ $title }}</div>\n    {{ with $content }}<p>{{ . }}</p>{{ end -}}\n{{- end -}}\n\n{{/* Main code */}}\n{{- if not $args.err -}}\n    {{ with $href }}\n        <a href=\"{{ . }}\" aria-label=\"{{ $title | safeHTML }}\"\n            {{- with $target }} target=\"{{ . }}\"{{ end }}\n            {{ with $rel }} rel=\"{{ . }}\"{{ end -}}\n        >\n    {{ end }}\n\n    {{ $illustration := \"\" }}\n    {{- if $thumbnail -}}\n        {{- $illustration = partial \"assets/image.html\" (dict\n            \"src\"     $thumbnail\n            \"title\"   $title\n            \"ratio\"   \"1x1\"\n            \"class\"   \"rounded-5\"\n            \"loading\" $args.loading\n        ) -}}\n    {{ end }}\n\n    <div class=\"d-none d-md-block\">\n        <div class=\"persona position-relative row mt-5 align-middle p-3\">\n            <div class=\"col-2\">\n                <div class=\"position-absolute top-50 start-0 translate-middle-y col-4 ps-3\">\n                    {{ $illustration }}\n                </div>\n            </div>\n            <div class=\"col-10 {{ with $args.color }}bg-{{ . }} text-bg-{{ . }}{{ end }} rounded-5 fs-md-5 fs-6 pe-5 pb-3\">\n                <div class=\"row\">\n                    <div class=\"col-3\"></div>\n                    <div class=\"col-9\">\n                        {{- partial \"inline/persona-body.html\" (dict \"title\" $title \"content\" $content) -}}\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n\n    <div class=\"d-md-none\">\n        <div class=\"persona position-relative row mt-5 align-middle p-3 ptw-5\">\n            <div class=\"col-12\">\n                <div class=\"position-absolute top-25 start-50 translate-middle col-6\">\n                    {{ $illustration }}\n                </div>\n            </div>\n            <div class=\"col-12 {{ with $args.color }}bg-{{ . }} text-bg-{{ . }}{{ end }} rounded-5 ptw-lg-5 ptw-3 ptw-sm-4 fs-md-5 fs-6 pb-3\">\n                <div class=\"p-3\">\n                    {{- partial \"inline/persona-body.html\" (dict \"title\" $title \"content\" $content) -}}\n                </div>\n            </div>\n        </div>\n    </div>\n    {{ if $href }}</a>{{ end }}\n{{ end }}"
  },
  {
    "path": "layouts/_partials/assets/section-title.html",
    "content": "<!-- \n    Copyright © 2024 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n-->\n\n{{/* Initialize arguments */}}\n {{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"section-title\" \"args\" . \"group\" \"partial\") }}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\" \"assets/section-title.html\" \n        \"warnid\"  \"warn-invalid-arguments\"\n        \"msg\"     \"Invalid arguments\"\n        \"details\" ($args.errmsg | append $args.warnmsg)\n        \"file\"    page.File\n    )}}\n{{ end }}\n\n{{/* Initialize global arguments */}}\n{{- $breakpoint := partial \"utilities/GetBreakpoint.html\" -}}\n{{- $padding := partial \"utilities/GetPadding.html\" -}}\n\n{{/* Initialize local arguments */}}\n{{- $size := (or $args.heading.size site.Params.style.title.size) | default 4 -}}\n{{- $arrangement := (or $args.arrangement site.Params.style.title.arrangement) | default \"above\" -}}\n{{- $headingStyle := (or $args.headingStyle site.Params.style.title.headingStyle) | default \"display\" -}}\n{{- $contentStyle := (or $args.contentStyle site.Params.style.title.contentStyle) | default \"lead text-muted\" -}}\n{{- $preheading := $args.heading.preheading }}\n{{- $title := $args.heading.title }}\n{{- $width := $args.heading.width | default 12 -}}\n{{- $width = cond (lt $width 12) (printf \"col-12 col-%s-%d\" $breakpoint.current $width) \"\" }}\n{{- if and (not $preheading) $args.useSection }}{{ $preheading = page.CurrentSection.Name }}{{ end -}}\n{{- $justify := cond (eq $args.justify \"start\") \"\" (cond (eq $args.justify \"end\") \"me-0\" \"mx-auto\") -}}\n\n{{ if and site.Params.main.titleCase (not $args.page.Params.exact) }}\n    {{ $preheading = title $preheading }}\n    {{ $title = title $title }}\n{{ end }}\n\n{{ define \"_partials/assets/section-title-header.html\" }}\n    {{ $headingStyle := .headingStyle }}\n\n    {{ if (index . \"use-title\") }}\n        {{ $title := .title | page.RenderString }}\n        {{ $label := trim (replaceRE \"\\r\\n?|\\n\" \" \" ($title | plainify)) \" \" }}\n        <h1 id=\"{{ anchorize .title }}\" {{ if ne $title $label }}aria-label=\"{{ $label }}\"{{ end -}}        \n            class=\"{{ $headingStyle }}-{{ .size }}{{ with .color }} text-{{ . }}{{ end }} pt-1\">\n                {{ .title | page.RenderString | safeHTML }}\n        </h1>\n    {{ else }}\n        <div id=\"{{ anchorize .title }}\" class=\"{{ $headingStyle }}-{{ .size }}{{ with .color }} text-{{ . }}{{ end }} pt-1\">\n            {{ .title | page.RenderString | safeHTML }}\n        </div>\n    {{ end }}\n{{ end }}\n\n{{ $header := \"\" }}\n{{ if $title }}\n    {{ $header = partial \"assets/section-title-header.html\" (dict\n        \"use-title\"    $args.useTitle\n        \"title\"        $title\n        \"headingStyle\" $headingStyle\n        \"color\"        $args.color\n        \"size\"         $size\n    ) }}\n{{ end }}\n\n{{ $links := \"\" }}\n{{ if $args.links }}\n    {{ $links = partial \"assets/links.html\" (dict\n        \"page\"      $args.page\n        \"links\"     $args.links\n        \"align\"     $args.heading.align\n        \"justify\"   $args.justify\n        \"link-type\" $args.linkType\n    ) }}\n{{ end }}\n\n{{/* Main code */}}\n{{ if or $args.heading.title $args.heading.content }}\n    <div class=\"section-title text-{{ $args.heading.align | default \"start\" }}{{ with $justify }} {{ . }}{{ end }}{{ with $args.class }} {{ . }}{{ end }} {{ with $width }}{{ . }}{{ else }}width-100{{ end }}\">\n        {{ if and $preheading (eq $arrangement \"first\") }}\n            <div class=\"container-fluid\">\n                <div class=\"row\">\n                    <div class=\"col-12 col-{{ $breakpoint.current }}-2 p-0\">\n                        {{ with $preheading }}\n                            <p class=\"preheading {{ if ne $args.color \"body\" }}text-{{ $args.color }}{{ else }}text-primary{{ end }}\">\n                                {{ . | page.RenderString | safeHTML }}\n                            </p>\n                        {{ end }}\n                    </div>\n                    <div class=\"col-12 col-{{ $breakpoint.current }}-8 p-0\">\n                        {{ $header }}\n                        {{ with $args.heading.content }}\n                            <div class=\"{{ $contentStyle }} pt-{{ $padding.y }}\">{{ . | page.RenderString | safeHTML }}</div>\n                        {{ end }}\n                        {{ $links }}\n                    </div>\n                </div>\n            </div>\n\n        {{/* Place above */}}\n        {{ else }}\n            {{ with $preheading }}\n                <p class=\"preheading {{ if ne $args.color \"body\" }}text-{{ $args.color }}{{ else }}text-primary{{ end }}\">\n                    {{ . | page.RenderString | safeHTML }}\n                </p>\n            {{ end }}\n            {{ $header }}\n            {{ with $args.heading.content }}<div class=\"{{ $contentStyle }} pt-{{ $padding.y }}\">{{ . | page.RenderString | safeHTML }}</div>{{ end }}\n            {{ $links }}\n        {{ end }}\n    </div>\n{{ end }}"
  },
  {
    "path": "layouts/_partials/assets/sidebar.html",
    "content": "{{/*\n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{/* Initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"sidebar\" \"args\" . \"group\" \"partial\") }}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict\n        \"partial\" \"assets/sidebar.html\"\n        \"warnid\"  \"warn-invalid-arguments\"\n        \"msg\"     \"Invalid arguments\"\n        \"details\" ($args.errmsg | append $args.warnmsg)\n        \"file\"    page.File\n    )}}\n{{ end }}\n\n{{/* Initialize local arguments */}}\n{{- $section := $args.page.Section }}\n\n{{/* Auto-generate hierarchical menu if enabled and no menu provided */}}\n{{- if and $args.autoGenerate (not $args.menu) -}}\n    {{- $result := partial \"assets/live-pages.html\" (dict\n        \"page\"             $args.page\n        \"section\"          $section\n        \"nested\"           $args.nested\n        \"sort\"             \"weight\"\n        \"reverse\"          \"false\"\n        \"group-by\"         \"section\"\n        \"include-list\"     true\n        \"exclude-filtered\" true\n    ) -}}\n    {{- /* Skip root section page and only show its children in sidebar */ -}}\n    {{- $menu := $result.menu -}}\n    {{- if and (gt (len $menu) 0) (index $menu 0).pages -}}\n        {{- /* Root item has children - use only children, skipping the root */ -}}\n        {{- $menu = (index $menu 0).pages -}}\n    {{- end -}}\n    {{- $args = merge $args (dict \"menu\" $menu) -}}\n{{- end -}}\n\n{{- define \"_partials/inline/sidebar/group-link.html\" -}}\n    {{- $page        := .page -}}\n    {{- $group       := .group -}}\n    {{- $baseURL     := .baseURL -}}\n    {{- $pre         := $group.pre -}}\n    {{- $collapsible := .collapsible | default false -}}\n    {{- $href        := $group.link | default \"\" -}}\n    {{- if and $href (not (hasPrefix $href \"/\")) -}}\n        {{- $href = partial \"utilities/URLJoin.html\" (dict \"base\" $baseURL \"path\" $href) -}}\n    {{- end -}}\n    {{- if and $href (not (hasSuffix $href \"/\")) -}}{{- $href = printf \"%s/\" $href -}}{{- end -}}\n    {{- $active := and $href (strings.HasPrefix $page.RelPermalink $href) -}}\n    {{- $groupTitle := $group.title -}}\n    {{- if and site.Params.main.titleCase (not $page.Params.exact) -}}\n        {{- $groupTitle = title $groupTitle -}}\n    {{- end -}}\n    <li class=\"mb-1\">\n        <a class=\"sidebar-item text-decoration-none rounded w-100{{ if $active }} active{{ end }}\"\n           {{- if $collapsible }} data-sidebar-label=\"{{ $groupTitle }}\"{{ end }}\n           {{ with $href }}href=\"{{ . }}\"{{ end }}>\n            {{- with $pre -}}\n                {{- if hasPrefix . \"<i\" -}}\n                    {{ . | safeHTML }}\n                {{- else -}}\n                    {{ partial \"assets/icon.html\" (dict \"icon\" (string .) \"class\" \"fa-fw me-1\" \"spacing\" false) }}\n                {{- end -}}\n            {{- end -}}\n            {{- if $collapsible -}}\n                <span class=\"sidebar-item-label ms-1\">{{- $groupTitle -}}</span>\n            {{- else -}}\n                {{- $groupTitle -}}\n            {{- end -}}\n        </a>\n    </li>\n{{- end -}}\n\n{{- define \"_partials/inline/sidebar/group.html\" -}}\n    {{- $page := .page -}}\n    {{- $index := .index -}}\n    {{- $level := .level -}}\n    {{- $baseURL := .baseURL -}}\n    {{- $group := .group -}}\n    {{- $data := .menu -}}\n    {{- $pre := $group.pre -}}\n\n    {{- $doc_slug := partial \"utilities/URLJoin.html\" (dict \"base\" $baseURL \"path\" ($group.title | urlize)) -}}\n    {{- $href := or $group.link $doc_slug -}}\n    {{- /* Handle absolute paths from hierarchical menu (starting with /) */ -}}\n    {{- if and $group.link (hasPrefix $group.link \"/\") -}}\n        {{- $href = $group.link -}}\n    {{- else if $group.link -}}\n        {{- /* Non-absolute link provided - use URLJoin */ -}}\n        {{- $href = partial \"utilities/URLJoin.html\" (dict \"base\" $baseURL \"path\" $group.link) -}}\n    {{- end -}}\n    {{ $ref := partial \"utilities/GetPage.html\" (dict \"url\" $href \"page\" $page) }}\n    {{ if eq $group.link \"#\" }}{{ $href = $doc_slug }}{{ end }}\n    {{- $collapsed := strings.HasPrefix $page.RelPermalink $href -}}\n    {{ if not (hasSuffix $href \"/\") }}{{ $href = printf \"%s/\" $href }}{{ end }}\n    {{- $current := eq $href $page.RelPermalink }}\n\n    <li class=\"mb-1\">\n        <div class=\"d-flex w-100 p-0 sidebar-item-group\">\n            <div class=\"text-start flex-grow-1\">\n                {{- $groupTitle := $group.title -}}\n                {{ if and site.Params.main.titleCase (not $page.Params.exact) }}{{ $groupTitle = title $groupTitle }}{{ end }}\n\n                {{ $dest := $href }}\n                {{ $target := \"\" }}\n                {{ if or $current (not $ref) }}\n                    {{ $dest = \"\" }}\n                {{ end }}\n                <a {{ with $dest }} href=\"{{ . }}\"{{ else }}\n                data-bs-toggle=\"collapse\"\n                data-bs-target=\"#sidebar-collapse-{{ $index }}-{{ $level }}\"\n                {{ end }}>\n                    {{- with $pre -}}\n                        {{- if hasPrefix . \"<i\" -}}\n                            {{ . | safeHTML }}\n                        {{- else -}}\n                            {{ partial \"assets/icon.html\" (dict \"icon\" (string .) \"class\" \"fa-fw me-1\" \"spacing\" false) }}\n                        {{- end -}}\n                    {{- end -}}\n                    {{- $groupTitle -}}\n                </a>\n            </div>\n\n            <button\n                class=\"btn btn-toggle-group d-inline-flex align-items-center rounded border-0 collapsed\"\n                data-bs-toggle=\"collapse\"\n                data-bs-target=\"#sidebar-collapse-{{ $index }}-{{ $level }}\"\n                aria-expanded=\"{{ if $collapsed }}true{{ else }}false{{ end }}\"\n            >\n            </button>\n        </div>\n        <div class=\"collapse {{ if $collapsed }}show{{ end }}\" id=\"sidebar-collapse-{{ $index }}-{{ $level }}\">\n            <ul class=\"btn-toggle-nav list-unstyled fw-normal {{ if eq $level 0}} pb-1 {{ end }}ps-3\">\n                {{- range $item := $group.pages -}}\n                    {{- if $item.pages -}}\n                        {{ partial \"inline/sidebar/group.html\" (dict\n                            \"page\"    $page\n                            \"index\"   $index\n                            \"level\"   (add $level 1)\n                            \"baseURL\" $href\n                            \"group\"   $item\n                            \"menu\"    $data\n                            \"pre\"     $item.pre\n                            )\n                        }}\n                    {{- else -}}\n                        {{ partial \"inline/sidebar/item.html\" (dict\n                            \"page\"         $page\n                            \"level\"        $level\n                            \"baseURL\"      $href\n                            \"title\"        $item.title\n                            \"href\"         $item.link\n                            \"menu\"         $data\n                            \"pre\"          $item.pre\n                            )\n                        }}\n                    {{ end -}}\n                {{- end }}\n            </ul>\n        </div>\n    </li>\n{{ end -}}\n\n{{- define \"_partials/inline/sidebar/item.html\" -}}\n    {{- $page        := .page -}}\n    {{- $level       := .level -}}\n    {{- $baseURL     := .baseURL -}}\n    {{- $title       := .title -}}\n    {{- $data        := .menu -}}\n    {{- $pre         := .pre -}}\n    {{- $collapsible := .collapsible | default false -}}\n    {{- $prefixMatch := .prefixMatch | default false -}}\n    {{- if and site.Params.main.titleCase (not $page.Params.exact) -}}\n        {{- $title = title $title -}}\n    {{- end -}}\n    {{- $titleText   := $title -}}\n    {{- if $collapsible -}}\n        {{- $titleText = printf \"<span class=\\\"sidebar-item-label ms-1\\\">%s</span>\" $title -}}\n    {{- end -}}\n    {{- $itemText := $titleText -}}\n    {{- with $pre -}}\n        {{- $iconHTML := partial \"assets/icon.html\" (dict \"icon\" (string .) \"class\" \"fa-fw me-1\" \"spacing\" false) -}}\n        {{- $itemText = printf \"%s%s\" (string $iconHTML) $titleText -}}\n    {{- end -}}\n    {{ $href := \"\" }}\n\n    {{ with .href }}\n        {{ if hasPrefix . \"http\" }}\n            {{ $href = . }}\n        {{ else if hasPrefix . \"/\" }}\n            {{- /* Absolute path (from hierarchical menu) - use directly */ -}}\n            {{ $href = . }}\n        {{ else }}\n            {{- /* Relative path - join with baseURL */ -}}\n            {{- $href = partial \"utilities/URLJoin.html\" (dict \"base\" $baseURL \"path\" .) -}}\n            {{ if not (hasSuffix $href \"/\") }}{{ $href = printf \"%s/\" $href }}{{ end }}\n        {{ end }}\n    {{ else }}\n        {{- $href = partial \"utilities/URLJoin.html\" (dict \"base\" $baseURL \"path\" ($title | urlize)) -}}\n        {{ if not (hasSuffix $href \"/\") }}{{ $href = printf \"%s/\" $href }}{{ end }}\n    {{ end }}\n    {{- $active := or (eq (strings.TrimSuffix \"/\" $page.RelPermalink) (strings.TrimSuffix \"/\" $href)) (and $prefixMatch $href (strings.HasPrefix $page.RelPermalink $href)) -}}\n\n    {{ if eq $level 0}}\n        <li class=\"mt-1 mb-1\"></li>\n        <li>\n            <ul class=\"btn-toggle-nav list-unstyled pb-1\">\n                <li>\n                    {{ $class := \"sidebar-item text-decoration-none rounded w-100\" }}\n                    {{ if $active }}{{ $class = printf \"%s active\" $class }}{{ end }}\n                    {{ $link := partial \"assets/link.html\" (dict \"href\" $href \"text\" $itemText \"class\" $class \"page\" $page \"exact\" true) }}\n                    {{- if and $collapsible $title $link -}}\n                        {{- $link = $link | replaceRE `(<a)\\s` (printf `${1} data-sidebar-label=\"%s\" ` ($title | htmlEscape)) -}}\n                    {{- end -}}\n                    {{ if $link }}\n                        {{ print $link | safeHTML }}\n                    {{ else }}\n                        {{- errorf \"partial [utilities/sidebar.html] - Invalid link in file: %s\" ($page.Scratch.Get \"sidebarFilename\") -}}\n                    {{ end }}\n                </li>\n            </ul>\n        </li>\n    {{ else }}\n        <li>\n            {{ $class := \"sidebar-item text-decoration-none rounded small w-100\" }}\n            {{ if $active }}{{ $class = printf \"%s active\" $class }}{{ end }}\n            {{ $link := partial \"assets/link.html\" (dict \"href\" $href \"text\" $itemText \"class\" $class \"page\" $page \"exact\" true) }}\n            {{ if $link }}\n                {{ print $link | safeHTML }}\n            {{ else }}\n                {{- errorf \"partial [utilities/sidebar.html] - Invalid link in file: %s\" ($page.Scratch.Get \"sidebarFilename\") -}}\n            {{ end }}\n        </li>\n    {{ end }}\n{{ end -}}\n\n{{/* Main code */}}\n{{ if and (not $args.error) $args.menu }}\n    {{- $levelMin    := $args.levelMin | default 0 -}}\n    {{- $levelMax    := $args.levelMax | default 0 -}}\n    {{- $collapsible := $args.collapsible | default false -}}\n    {{- $page        := $args.page -}}\n    {{- $iconCollapse  := partial \"utilities/GetThemeIcon.html\" (dict \"id\" \"sidebarCollapse\"  \"default\" \"fas angles-left\") -}}\n    {{- $iconSecondary := partial \"utilities/GetThemeIcon.html\" (dict \"id\" \"sidebarSecondary\" \"default\" \"fas angle-up\") -}}\n    {{- $hasSpacerItem := gt (len (where $args.menu \"spacer\" true)) 0 -}}\n    {{- $sidebarId     := $section | urlize | default \"sidebar\" -}}\n    <nav class=\"sidebar flex-shrink-0 ps-1{{ if ge $levelMin 2 }} sidebar-sub{{ end }}{{ if $collapsible }} sidebar-collapsible{{ end }}{{ if $hasSpacerItem }} sidebar-has-spacer{{ end }}\"\n         {{- if $collapsible }} data-storage-key=\"sidebar-collapsed\"{{ end }}\n         aria-label=\"{{ (strings.FirstUpper $section) }} navigation\">\n        {{- $level := 0 -}}\n        {{ $baseURL := $args.page.Scratch.Get \"baseURL\" | default \"/\" -}}\n        {{ $baseURL = partial \"utilities/URLJoin.html\" (dict \"elements\" (slice \"/\" (strings.TrimPrefix $baseURL (urls.JoinPath $section $args.version | relLangURL)))) }}\n\n        {{- if and (le $levelMin 1) (eq $levelMax 1) -}}\n            {{/* Mode A: L1-only — render group headers as plain links, leaves normally */}}\n            {{- if $collapsible -}}\n            <div class=\"sidebar-toggle-container d-flex justify-content-end mb-2 pe-1\">\n                <button class=\"btn btn-sm sidebar-toggle-btn p-1 border-0\" aria-label=\"Toggle sidebar\">\n                    {{- partial \"assets/icon.html\" (dict \"icon\" $iconCollapse \"class\" \"sidebar-icon-toggle\") -}}\n                </button>\n            </div>\n            {{- end -}}\n            {{- $groupItems    := slice -}}\n            {{- $alwaysVisible := slice -}}\n            <ul class=\"list-unstyled ps-0\">\n            {{- range $index, $item := $args.menu -}}\n                {{- if $item.spacer -}}\n                    <li class=\"sidebar-spacer\" aria-hidden=\"true\"></li>\n                {{- else if $item.group -}}\n                    {{- if index $item \"always-visible\" -}}\n                        {{- $alwaysVisible = $alwaysVisible | append $item -}}\n                    {{- else -}}\n                        {{- $groupItems = $groupItems | append $item -}}\n                    {{- end -}}\n                {{- else if $item.pages -}}\n                    {{ partial \"inline/sidebar/group-link.html\" (dict\n                        \"page\"        $page\n                        \"group\"       $item\n                        \"baseURL\"     $baseURL\n                        \"collapsible\" $collapsible\n                    ) }}\n                {{- else -}}\n                    {{ partial \"inline/sidebar/item.html\" (dict\n                        \"page\"        $page\n                        \"level\"       $level\n                        \"baseURL\"     $baseURL\n                        \"title\"       $item.title\n                        \"href\"        $item.link\n                        \"menu\"        $args.menu\n                        \"pre\"         $item.pre\n                        \"collapsible\" $collapsible\n                    ) }}\n                {{- end -}}\n            {{- end -}}\n            {{- if $groupItems -}}\n                <li>\n                    <div class=\"collapse\" id=\"sidebar-secondary-{{ $sidebarId }}\">\n                        <ul class=\"list-unstyled ps-0\">\n                        {{- range $groupItems -}}\n                            {{ partial \"inline/sidebar/item.html\" (dict\n                                \"page\"        $page\n                                \"level\"       $level\n                                \"baseURL\"     $baseURL\n                                \"title\"       .title\n                                \"href\"        .link\n                                \"menu\"        $args.menu\n                                \"pre\"         .pre\n                                \"collapsible\" $collapsible\n                                \"prefixMatch\" true\n                            ) }}\n                        {{- end -}}\n                        </ul>\n                    </div>\n                </li>\n            {{- end -}}\n            {{- range $alwaysVisible -}}\n                {{- $avHref := .link | default \"\" -}}\n                {{- if and $avHref (not (hasPrefix $avHref \"/\")) (not (hasPrefix $avHref \"http\")) -}}\n                    {{- $avHref = partial \"utilities/URLJoin.html\" (dict \"base\" $baseURL \"path\" $avHref) -}}\n                {{- end -}}\n                {{- if and $avHref (not (hasSuffix $avHref \"/\")) -}}{{- $avHref = printf \"%s/\" $avHref -}}{{- end -}}\n                {{- $avActive := eq (strings.TrimSuffix \"/\" $page.RelPermalink) (strings.TrimSuffix \"/\" $avHref) -}}\n                {{- $avTitle := .title -}}\n                {{- if and site.Params.main.titleCase (not $page.Params.exact) -}}{{- $avTitle = title $avTitle -}}{{- end -}}\n                <li class=\"mt-1 mb-1\"></li>\n                <li>\n                    <ul class=\"btn-toggle-nav list-unstyled pb-1\">\n                        <li class=\"d-flex align-items-center sidebar-secondary-row\">\n                            <a class=\"sidebar-item text-decoration-none rounded flex-grow-1{{ if $avActive }} active{{ end }}\"\n                               {{- if $collapsible }} data-sidebar-label=\"{{ $avTitle }}\"{{ end }}\n                               href=\"{{ $avHref }}\">\n                                {{- with .pre -}}\n                                    {{- partial \"assets/icon.html\" (dict \"icon\" (string .) \"class\" \"fa-fw me-1\" \"spacing\" false) -}}\n                                {{- end -}}\n                                {{- if $collapsible -}}\n                                    <span class=\"sidebar-item-label ms-1\">{{- $avTitle -}}</span>\n                                {{- else -}}\n                                    {{- $avTitle -}}\n                                {{- end -}}\n                            </a>\n                            {{- if $groupItems -}}\n                            <button class=\"sidebar-secondary-toggle btn border-0 p-1 flex-shrink-0\"\n                                    data-bs-toggle=\"collapse\"\n                                    data-bs-target=\"#sidebar-secondary-{{ $sidebarId }}\"\n                                    aria-expanded=\"false\"\n                                    aria-controls=\"sidebar-secondary-{{ $sidebarId }}\"\n                                    aria-label=\"{{ T \"toggleSecondary\" | default \"Toggle more items\" }}\">\n                                {{- partial \"assets/icon.html\" (dict \"icon\" $iconSecondary \"class\" \"sidebar-secondary-icon fa-fw\" \"spacing\" false) -}}\n                            </button>\n                            {{- end -}}\n                        </li>\n                    </ul>\n                </li>\n            {{- end -}}\n            </ul>\n        {{- else if ge $levelMin 2 -}}\n            {{/* Mode B: L2+ subtree — find active L1 group via URL prefix, render its children */}}\n            {{- $activeGroup := dict -}}\n            {{- range $args.menu -}}\n                {{- if .pages -}}\n                    {{- $h := .link | default \"\" -}}\n                    {{- if and $h (not (hasSuffix $h \"/\")) -}}{{- $h = printf \"%s/\" $h -}}{{- end -}}\n                    {{- if and $h (strings.HasPrefix $page.RelPermalink $h) -}}\n                        {{- $activeGroup = . -}}\n                    {{- end -}}\n                {{- end -}}\n            {{- end -}}\n            {{- with $activeGroup.pages -}}\n                <ul class=\"list-unstyled ps-0\">\n                {{- range $index, $item := . -}}\n                    {{- if $item.pages -}}\n                        {{ partial \"inline/sidebar/group.html\" (dict\n                            \"page\"    $page\n                            \"index\"   $index\n                            \"level\"   1\n                            \"baseURL\" $baseURL\n                            \"group\"   $item\n                            \"menu\"    $activeGroup.pages\n                        ) }}\n                    {{- else -}}\n                        {{ partial \"inline/sidebar/item.html\" (dict\n                            \"page\"    $page\n                            \"level\"   $level\n                            \"baseURL\" $baseURL\n                            \"title\"   $item.title\n                            \"href\"    $item.link\n                            \"menu\"    $activeGroup.pages\n                            \"pre\"     $item.pre\n                        ) }}\n                    {{- end -}}\n                {{- end -}}\n                </ul>\n            {{- end -}}\n        {{- else -}}\n            {{/* Mode C: Default — render full tree */}}\n            <ul class=\"list-unstyled ps-0\">\n            {{- range $index, $item := $args.menu -}}\n                {{- if $item.pages }}\n                    {{ partial \"inline/sidebar/group.html\" (dict\n                        \"page\"    $page\n                        \"index\"   $index\n                        \"level\"   (add $level 1)\n                        \"baseURL\" $baseURL\n                        \"group\"   $item\n                        \"menu\"    $args.menu\n                        )\n                    }}\n                {{- else }}\n                    {{ partial \"inline/sidebar/item.html\" (dict\n                        \"page\"         $page\n                        \"level\"        $level\n                        \"baseURL\"      $baseURL\n                        \"title\"        $item.title\n                        \"href\"         $item.link\n                        \"menu\"         $args.menu\n                        \"pre\"          $item.pre\n                        )\n                    }}\n                {{- end }}\n            {{- end }}\n            </ul>\n        {{- end }}\n    </nav>\n{{ end }}\n"
  },
  {
    "path": "layouts/_partials/assets/spinner.html",
    "content": "{{/*\n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{/* Initialize arguments */}}\n{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"spinner\" \"args\" . \"group\" \"partial\") -}}\n{{- if or $args.err $args.warnmsg -}}\n    {{- partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict\n        \"partial\" \"assets/spinner.html\"\n        \"warnid\"  \"warn-invalid-arguments\"\n        \"msg\"     \"Invalid arguments\"\n        \"details\" ($args.errmsg | append $args.warnmsg)\n        \"file\"    page.File\n    )}}\n{{- end -}}\n\n{{/* Main code */}}\n{{- if not $args.err -}}\n    {{- with $args.class }}<div class=\"{{ . }}\">{{ end -}}\n        <div class=\"spinner-{{ if $args.grow }}grow{{ else }}border{{ end }} text-{{ $args.color }}\" role=\"status\">\n            <span class=\"visually-hidden\">{{ or $args.label (T \"loading\") }}</span>\n        </div>\n    {{- if $args.class }}</div>{{ end -}}\n{{- end -}}\n"
  },
  {
    "path": "layouts/_partials/assets/stack.html",
    "content": "<!-- \n    Copyright © 2024 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n-->\n\n{{/* Initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"stack\" \"child\" \"card\" \"args\" . \"group\" \"partial\") }}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\" \"assets/stack.html\" \n        \"warnid\"  \"warn-invalid-arguments\"\n        \"msg\"     \"Invalid arguments\"\n        \"details\" ($args.errmsg | append $args.warnmsg)\n        \"file\"    page.File\n    )}}\n{{ end }}\n\n{{/* Main code */}}\n{{ if not $args.err }}\n\t{{ if and (eq (len $args.list) 0) (not $args.hideEmpty) }}\n\t\t<p class=\"pt-4\">{{- T \"emptyList\" }}.</p>\n\t{{ else }}\n\t\t{{ $params := dict\n\t\t\t\"page\"         $args.page\n\t\t\t\"list\"         $args.list\n\t\t\t\"limit\"        (or $args.limit $args.max)\n\t\t\t\"class\"        \"border-0 card-zoom\"\n\t\t\t\"header-style\" \"none\"\n\t\t\t\"body-style\"   \"title\"\n\t\t\t\"footer-style\" \"none\"\n\t\t\t\"href\"         $args.href\n\t\t\t\"href-force\"   $args.hrefForce\n\t\t\t\"href-title\"   $args.hrefTitle\n\t\t\t\"link-type\"    (or $args.linkType $args.buttonType)\n\t\t\t\"link-icon\"    $args.linkIcon\n\t\t}}\n\n\t\t{{- partial \"assets/card-group.html\" (merge $params\n\t\t\t(dict \n\t\t\t\"cols\"        $args.cols\n\t\t\t\"gutter\"      $args.gutter\n\t\t\t\"padding\"     $args.padding\n\t\t\t\"orientation\" \"stacked\"\n\t\t\t\"scroll\"      true\n\t\t\t\"bento\"       true\n\t\t\t\"spacer\"      $args.animated\n\t\t\t\"portrait\"    false\n\t\t\t\"valign\"      (cond $args.animated \"\" \"end\")\n\t\t\t\"styles\"      $args.styles\n\t\t\t\"wrapper\"     \"card-stack p-0 my-3 d-none d-md-block\"\n\t\t)) -}}\n\n\t\t{{- partial \"assets/card-group.html\" (merge $params\n\t\t\t(dict \n\t\t\t\"cols\"        (cond (eq $args.orientation \"stacked\") 2 1)\n\t\t\t\"responsive\"  false\n\t\t\t\"padding\"     (cond (gt $args.padding 0) $args.padding 3)\n\t\t\t\"orientation\" $args.orientation\n\t\t\t\"ratio\"       $args.ratio\n\t\t\t\"scroll\"      false\n\t\t\t\"spacer\"      false\n\t\t\t\"portrait\"    false\n\t\t\t\"wrapper\"     \"card-stack p-0 d-md-none\"\n\t\t)) -}}\n\t{{ end }}\n{{ end }}\n"
  },
  {
    "path": "layouts/_partials/assets/table.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{ define \"_partials/inline/table.html\" }}\n    {{ $page := .page }}\n    {{ $input := .input }}\n    {{ $attributes := .attributes }}\n    {{ $class := .class }}\n    {{ $wrap := .wrap }}\n\n    {{ if $wrap }}{{ $input = printf \"%s\\n{.table-wrap}\" (chomp $input) }}{{ end }}    \n    {{- $input = $input | $page.RenderString }}\n    {{ $regex := `<table\\s*class=\"(.+?)\"` }}\n    {{ $current := (index (index (findRESubmatch $regex $input) 0) 1) }}\n    {{ $target := delimit (((split $current \" \") | append \"table\" | append $class) | uniq) \" \" }}\n\n    {{- $new := printf `<table class=\"%s\" %s` $target (trim $attributes \" \") -}}\n    {{ $input := replaceRE $regex $new $input 1 -}}\n\n    {{ return $input }}\n{{ end }}\n\n{{/* Initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"table\" \"args\" . \"group\" \"partial\")}}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\" \"assets/table.html\" \n        \"warnid\"  \"warn-invalid-arguments\"\n        \"msg\"     \"Invalid arguments\"\n        \"details\" ($args.errmsg | append $args.warnmsg)\n        \"file\"    page.File\n    )}}\n{{ end }}\n\n{{/* Initialize local variables */}}\n{{ $class := $args.class }}\n{{ if or $args.sortable $args.paginate $args.searchable }}{{ $class = trim (printf \"%s data-table\" $class) \" \" }}{{ end }}\n\n{{ $attributes := \"\" }}\n{{ if $args.sortable }}{{ $attributes = printf \"%s data-table-sortable=true\" $attributes }}{{ end }}\n{{ if $args.paginate }}\n    {{ $pagination := or $args.pagination $args.pagingOptionPerPage | default 10 }}\n    {{ $select := or $args.paginationSelect $args.pagingOptionPageSelect }}\n    {{ $attributes = printf \"%s data-table-paging=true\" $attributes }}\n    {{ $attributes = printf \"%s data-table-paging-option-perPage=%d\" $attributes $pagination }}\n    {{ with $select }}\n        {{ $attributes = printf \"%s data-table-paging-option-perPageSelect=%s\" $attributes . }}\n    {{ end }}\n{{ end }}\n{{ if $args.searchable }}{{ $attributes = printf \"%s data-table-searchable=true\" $attributes }}{{ end }}\n\n{{/* Filter */}}\n{{ $filter := $args.filter }}\n{{ $filterCol := $args.filterCol | default 1 }}\n{{ $filterId := \"\" }}\n{{ if $filter }}\n    {{ $filterId = printf \"table-filter-%s\" (md5 (delimit (slice . now) \"-\")) }}\n    {{ $attributes = printf \"%s data-filter-col=%d data-filter-id=%s\" $attributes $filterCol $filterId }}\n{{ end }}\n\n{{/* Main code */}}\n{{ if not $args.err }}\n    {{- $breakpoint := $args.page.Scratch.Get \"breakpoint\" -}}\n    {{ $params := dict \"page\" $args.page \"input\" $args.input \"attributes\" $attributes \"class\" $class }}\n    {{ $regular := partial \"inline/table.html\" (merge $params (dict \"wrap\" false)) }}\n    {{ $wrapped := \"\" }}\n    {{ if $args.wrap }}{{ $wrapped = partial \"inline/table.html\" (merge $params (dict \"wrap\" true)) }}{{ end }}\n    {{ $wrapper := $args.wrapper | default \"\" }}\n\n    {{ if $filter }}\n    <div class=\"table-filter-controls d-flex justify-content-start mb-3\">\n        <div class=\"btn-group\" role=\"group\" aria-label=\"{{ T \"tableFilterLabel\" | default \"Filter\" }}\">\n            <button type=\"button\"\n                    class=\"btn btn-outline-primary active\"\n                    data-filter-table=\"{{ $filterId }}\"\n                    data-filter-value=\"\">{{ T \"tableFilterAll\" | default \"All\" }}</button>\n            {{ range $filter }}\n            <button type=\"button\"\n                    class=\"btn btn-outline-primary\"\n                    data-filter-table=\"{{ $filterId }}\"\n                    data-filter-value=\"{{ . }}\">{{ . | title }}</button>\n            {{ end }}\n        </div>\n    </div>\n    {{ end }}\n\n    {{ if eq $args.breakpoint \"none\" }}\n        {{ $regular | safeHTML }}\n        {{ with $wrapped }}\n            {{ if $wrapper }}<div class=\"{{ $wrapper }}\">{{ . | safeHTML }}</div>{{ else }}{{ . | safeHTML }}{{ end }}\n        {{ end }}\n    {{ else }}\n        <div class=\"table-responsive{{- with $args.breakpoint }}-{{ . }}{{ end }} {{ if $wrapped }}d-none d-{{ $breakpoint.current }}-block{{ end }} {{ $wrapper }}\"{{ if $filter }} data-filter-container=\"{{ $filterId }}\"{{ end }}>\n        {{ $regular | safeHTML }}\n        </div>\n\n        {{ with $wrapped }}\n            <div class=\"table-responsive{{- with $args.breakpoint }}-{{ . }}{{ end }} d-{{ $breakpoint.current }}-none {{ $wrapper }}\"{{ if $filter }} data-filter-container=\"{{ $filterId }}\"{{ end }}>\n            {{ . | safeHTML }}\n            </div>\n        {{ end }}\n    {{ end }}\n{{ end }}"
  },
  {
    "path": "layouts/_partials/assets/testimonial.html",
    "content": "<!-- \n    Copyright © 2024 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n-->\n\n<!-- Inline partials -->\n{{ define \"_partials/inline/testimonial-contact.html\" }}\n    <div class=\"p-0\">\n        {{- partial \"assets/live-image.html\" (dict \n            \"src\"   .image\n            \"ratio\" \"1x1\"\n            \"class\" .class\n            \"title\" .contact\n            \"mode\"  false\n            \"sizes\" \"(min-width: 768px) 5vw, 10vw\"\n            \"page\"  .page\n        ) }}\n    </div>\n    <div class=\"flex-grow-1 p-0 align-self-center ps-2\">\n        <div class=\"text-{{ .align }}\">\n            {{ if .url }}\n                {{ partial \"assets/link.html\" (dict\n                    \"href\" .url\n                    \"text\" .contact\n                    \"page\" .page\n                    \"class\" (cond .color (printf \"fw-bold link-bg-%s\" .color) \"fw-bold\")\n                ) }}\n            {{ else }}\n                {{ .contact }}\n            {{ end }}\n        </div>\n        {{ with .role }}<div class=\"text-{{ $.align }}\">{{ . }}</div>{{ end }}\n    </div>\n{{ end }}\n\n{{ define \"_partials/inline/testimonial-minimal.html\" }}\n    {{ $class := (index . \"icon-style\") | default \"fa-2xl text-center\" }}\n    {{ $wrapper := printf \"text-%s\" (.align | default \"start\") }}\n    {{ if and (not .icon) .logo }}{{ $class = \"testimonial-logo\" }}{{ end }}\n    {{ $title := trim (printf \"%s logo\" (humanize (path.BaseName .logo))) \" .\" }}\n\n    {{ partial \"assets/featured-illustration.html\" (dict\n        \"page\"    .page\n        \"image\"   .logo\n        \"icon\"    .icon\n        \"class\"   $class\n        \"wrapper\" $wrapper\n        \"title\"   $title\n    ) }}\n{{ end }}\n\n{{ define \"_partials/inline/testimonial-inner.html\" }}\n    {{ $breakpoint := .breakpoint }}\n    {{- $testimonialNext := partial \"utilities/GetThemeIcon.html\" (dict \"id\" \"testimonialNext\" \"default\" \"fas chevron-right\") -}}\n    {{ $align := .align | default \"start\" }}\n\n    <div class=\"d-flex flex-column {{ .class }} h-100 p-{{ .padding }}\">\n        {{ if or .logo .icon }}\n            <div class=\"p-0 text-{{ $align }}\">\n                {{ $wrapper := cond .logo (printf \"py-4 py-md-0 col-4 col-%s-2\" $breakpoint.current) \"\" }}\n                {{ $class := \"\" }}\n                {{ if .icon }}\n                    {{ $class = index . \"icon-style\" | default \"\"}}\n                    {{ with .align }}{{ $wrapper = printf \"text-%s\" . }}{{ end }}\n                {{ end }}\n                {{ if and (not .icon) .logo }}{{ $class = \"testimonial-logo\" }}{{ end }}\n                {{ $title := trim (printf \"%s logo\" (humanize (path.BaseName .logo))) \" .\" }}\n\n                {{ partial \"assets/featured-illustration.html\" (dict\n                    \"page\"    .page\n                    \"image\"   .logo\n                    \"icon\"    .icon\n                    \"class\"   $class\n                    \"title\"   $title\n                    \"wrapper\" $wrapper\n                ) }}\n            </div>\n        {{ end }}\n        {{ if .content }}\n            <div class=\"fs-md-5 pt-3 h-100\">\n                {{ .content | .page.RenderString }}\n            </div>\n        {{ end }}\n        {{ if or .contact .link }}\n            <div class=\"container pt-3 p-0\">\n                <div class=\"d-flex p-0\">\n                    {{ if and .image .contact (not (eq .orientation \"horizontal\")) }}\n                        {{ partial \"inline/testimonial-contact.html\" (dict \n                            \"page\"    .page\n                            \"image\"   .image\n                            \"contact\" .contact\n                            \"role\"    .role\n                            \"url\"     .url\n                            \"color\"   .color\n                            \"align\"   \"start\"\n                            \"class\"   \"rounded-circle testimonial-img\"\n                        )}}\n                    {{ else if .link }}\n                        {{ partial \"assets/button.html\" (dict \n                            \"href\"    .link\n                            \"title\"   (T \"testimonialCase\")\n                            \"class\"   \"btn-testimonial\"\n                            \"icon\"    $testimonialNext\n                            \"outline\" true\n                        ) }}\n                    {{ end }}\n                </div>\n            </div>\n        {{ end }}\n    </div>\n{{ end }}\n\n{{ define \"_partials/inline/testimonial-card.html\" }}\n    {{ $breakpoint := .breakpoint }}\n\n    {{ if and .image .contact (eq .orientation \"horizontal\") }}\n        <div class=\"container\">\n            <div class=\"row\">\n                <div class=\"col-6 col-{{ $breakpoint.current }}-3 mx-auto\">\n                    {{ partial \"inline/testimonial-contact.html\" (dict \n                        \"page\"    .page\n                        \"image\"   .image\n                        \"contact\" .contact\n                        \"role\"    .role\n                        \"url\"     .url\n                        \"color\"   .color\n                        \"align\"   \"center\"\n                        \"class\"   \"rounded-circle text-center\"\n                    )}}\n                </div>\n                <div class=\"col-12 col-{{ $breakpoint.current }}-9\">\n                    {{ partial \"inline/testimonial-inner.html\" . }}\n                </div>\n            </div>\n        </div>\n    {{ else if and (or .logo .icon) (not .content) (not .contact) (not .link) }}\n        {{ partial \"inline/testimonial-minimal.html\" . }}\n    {{ else }}\n        {{ partial \"inline/testimonial-inner.html\" . }}\n    {{ end }}\n{{ end }}\n\n{{/* Initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"testimonial\" \"args\" . \"group\" \"partial\") }}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\" \"assets/testimonial.html\" \n        \"warnid\"  \"warn-invalid-arguments\"\n        \"msg\"     \"Invalid arguments\"\n        \"details\" ($args.errmsg | append $args.warnmsg)\n        \"file\"    page.File\n    )}}\n{{ end }}\n\n{{/* Initialize global variables */}}\n{{- $breakpoint := partial \"utilities/GetBreakpoint.html\" -}}\n{{- $testimonialQuote := partial \"utilities/GetThemeIcon.html\" (dict \"id\" \"testimonialQuote\" \"default\" \"fas quote-right\") -}}\n\n{{/* Initialize local variables */}}\n{{- $link := \"\" -}}\n{{ with $args.link }}\n    {{ $href := partial \"utilities/GetLink.html\" (dict \"page\" $args.page \"href\" .) }}\n    {{ if not $href.error }}\n        {{ $link = $href.href }}\n    {{ else }}\n        {{ with $args.page.File }}\n            {{ warnf \"Error processing link on page '%s': %s\" (path.Join \"/content\" .Path) $href.msg }}\n        {{ else }}\n            {{ warnf \"Error processing link: %s\" $href.msg }}\n        {{ end }}\n    {{ end }}\n{{ end }}\n\n{{/* Main code */}}\n{{ if not $args.err }}\n    <div class=\"h-100 rounded container-fluid {{ $args.class }} p-{{ $args.padding }}\">\n        {{ $params := dict \n            \"page\"        $args.page\n            \"content\"     $args.content\n            \"icon\"        $args.icon\n            \"icon-style\"  $args.iconStyle\n            \"logo\"        $args.logo\n            \"contact\"     $args.contact\n            \"role\"        $args.role\n            \"image\"       $args.image\n            \"padding\"     $args.padding\n            \"orientation\" $args.orientation\n            \"url\"         $args.url\n            \"link\"        $link\n            \"color\"       $args.color\n            \"breakpoint\"  $breakpoint\n            \"align\"       $args.align\n        }}\n\n        {{ if $args.showControls }}\n            <div class=\"row\">\n                <div class=\"col-2\"></div>\n\n                {{ partial \"inline/testimonial-card.html\" (merge $params (dict \"class\" \"col-8 px-0 mb-5\")) }}\n\n                <div class=\"testimonial-icon col-2 ps-0 p-{{ $args.padding }} text-end\">\n                    {{ partial \"assets/icon.html\" (dict \"icon\" $testimonialQuote \"class\" \"fa-2x\" \"spacing\" false) }}\n                </div>\n            </div>\n        {{ else }}\n            {{ partial \"inline/testimonial-card.html\" $params }}\n        {{ end }}\n    </div>\n{{ end }}\n"
  },
  {
    "path": "layouts/_partials/assets/timeline.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n\n    Inspired by the timeline snippet from Siddharth Panchal at https://bootsnipp.com/snippets/Q0ppE\n*/}}\n\n{{ $error := false }}\n\n{{/* Initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"timeline\" \"args\" . \"group\" \"partial\" )}}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\" \"assets/timeline.html\" \n        \"msg\"     \"Invalid arguments\"\n        \"details\" ($args.errmsg | append $args.warnmsg)\n        \"file\"    page.File\n    )}}\n    {{ $error = $args.err }}\n{{ end }}\n\n{{/* Initialize global variables */}}\n{{ $arrangement := or (index site.Params \"style\" \"title\" \"arrangement\") \"above\" }}\n{{- $padding := partial \"utilities/GetPadding.html\" -}}\n\n{{/* Initialize local arguments */}}\n{{- $page := $args.page -}}\n{{- $data := \"\" -}}\n{{- with $args.data -}}{{- $data = partial \"utilities/GetI18nData.html\" (dict \"page\" $page \"data\" .) -}}{{- end -}}\n{{- if and (not $data) (not $args.section) -}}\n    {{ partial \"utilities/LogErr.html\" (dict\n        \"partial\" \"assets/timeline.html\"\n        \"msg\"     \"Invalid arguments\"\n        \"details\" (slice (printf \"Invalid timeline data '%s'\" $args.data))\n        \"file\"    page.File\n    )}}\n    {{ $error = true }}\n{{- end -}}\n\n{{/* Override data from a Hugo content section when section is provided */}}\n{{- if $args.section -}}\n    {{- $sectionPage := site.GetPage $args.section -}}\n    {{- if $sectionPage -}}\n        {{- $pages := $sectionPage.RegularPages.ByDate.Reverse -}}\n        {{- $sectionData := slice -}}\n        {{- range $pages -}}\n            {{- $sectionData = $sectionData | append (dict\n                \"title\"   .Title\n                \"date\"    .Date\n                \"content\" .Description\n                \"url\"     .RelPermalink\n                \"color\"   \"primary\"\n            ) -}}\n        {{- end -}}\n        {{- $data = $sectionData -}}\n    {{- else -}}\n        {{- partial \"utilities/LogWarn.html\" (dict\n            \"partial\" \"assets/timeline.html\"\n            \"warnid\"  \"warn-invalid-section\"\n            \"msg\"     \"Invalid section\"\n            \"details\" (slice (printf \"Section '%s' not found\" $args.section))\n            \"file\"    page.File\n        ) -}}\n    {{- end -}}\n{{- end -}}\n\n{{/* Apply limit */}}\n{{- if and $args.limit (gt (len $data) $args.limit) -}}\n    {{- $data = first $args.limit $data -}}\n{{- end -}}\n\n{{ $background := partial \"utilities/GetBackgroundStyle.html\" (dict \"background\" $args.background) }}\n\n{{/* Inline partial to render icon */}}\n{{- define \"_partials/inline/timeline-icon.html\" -}}\n    {{- $col := default 6 .col -}}\n    {{- $icon := .icon -}}\n    {{- $class := .class -}}\n    {{- $direction := .direction -}}\n    <div class=\"col-{{ $col }} d-flex justify-content-{{ $direction }} align-items-center\">\n        <div class=\"d-flex\">\n            <div class=\"d-flex timeline-semi-circle-{{ $direction }} align-items-center justify-content-center\">\n                {{ partial \"assets/icon.html\" (dict\n                    \"icon\"       $icon\n                    \"class\"      (cond $class $class \"fa-fluid\")\n                    \"wrapper\"    \"fa-wrapper\"\n                    \"spacing\"    false\n                ) }}\n            </div>\n            <div class=\"timeline-connector-{{ $direction }} {{ if eq $direction \"start\" }} order-first{{ end }}\"></div>\n        </div>\n    </div>\n{{- end -}}\n\n{{/* Inline partial to render icon */}}\n{{- define \"_partials/inline/timeline-panel.html\" -}}\n    {{- $col := default 6 .col -}}\n    {{- $page := .page -}}\n    {{- $content := .content -}}\n    {{- $color := .color -}}\n    {{- $title := .title -}}\n    {{- $badge := .badge -}}\n    {{- $url := .url -}}\n    {{- $date := .date -}}\n    {{- if and $url (not (hasPrefix $url \"http\")) -}}\n        {{- $url = partial \"utilities/URLJoin.html\" (dict \"base\" site.Params.docs.release \"path\" $url) }}\n    {{- end -}}\n    {{- $direction := .direction -}}\n\n    <div class=\"col-{{ $col }} d-flex align-items-center\">\n        <div class=\"d-flex h-100 width-100\">\n            <div class=\"timeline-panel-{{ $direction }}\"></div>\n            <div class=\"timeline-description-text-{{ $direction }} p-3 width-100\">\n                <div>\n                    {{ with $url }}\n                        <a class=\"fs-5 fw-bold text-uppercase link-{{ $color }} text-break align-middle\" href=\"{{ . }}\">{{ $title }}</a>\n                        <span class=\"badge rounded-pill text-bg-{{ $color }} ms-1\">{{ if $badge }}<a class=\"link-bg-{{ $color }}\" href=\"{{ . }}\">{{ $badge }}</a>{{ end }}</span>\n                    {{ else}}\n                        <span class=\"fs-5 fw-bold text-uppercase text-{{ $color }} text-break align-middle\">{{ $title }}</span>\n                        <span class=\"badge rounded-pill text-bg-{{ $color }} ms-1\">{{ if $badge }}{{ $badge }}{{ end }}</span>\n                    {{ end }}\n                </div>\n                {{ if $date }}\n                    {{ $datestr := (partial \"utilities/date.html\" (dict \"date\" $date \"format\" \"long\")) -}}\n                    <p class=\"mb-0\"><small class=\"text-body-secondary text-uppercase\">{{ $datestr -}}</small></p>\n                {{ end }}\n                <p class=\"mt-3 mb-0\">\n                    <!-- TODO: $page.RenderString causes an out of bounds error -->\n                    {{ $content | markdownify }}\n                </p>\n            </div>\n        </div>\n    </div>    \n{{- end -}}\n\n{{/* Main code */}}\n{{ if not $error }}\n    {{ $title := \"\" }}\n    {{ if $args.heading }}\n        {{ $title = partial \"assets/section-title.html\" (dict\n            \"heading\"     $args.heading\n            \"use-title\"   $args.useTitle\n            \"size\"        $args.size\n            \"links\"       $args.links\n            \"link-type\"   (or $args.linkType $args.type)\n            \"arrangement\" $arrangement\n            \"justify\"     $args.justify\n\t\t    \"class\"       (printf \"pb-%d\" $padding.y)\n        ) }}\n    {{ end }}\n\n    {{/* Render start (compact start-aligned) timeline */}}\n    {{ if eq $args.layout \"start\" }}\n        {{ $title | safeHTML }}\n        <ul class=\"timeline-start{{ with $args.class }} {{ . }}{{ end }}\">\n            {{ range $data }}\n                <li>\n                    {{- $datestr := \"\" -}}\n                    {{- with .date -}}\n                        {{- $datestr = partial \"utilities/date.html\" (dict \"date\" . \"format\" \"long\") -}}\n                    {{- end -}}\n                    {{ if and .url $datestr }}\n                        <a href=\"{{ .url }}\">{{ $datestr }}</a>\n                    {{ else if $datestr }}\n                        <span>{{ $datestr }}</span>\n                    {{ else if .url }}\n                        <a href=\"{{ .url }}\">{{ .title }}</a>\n                    {{ end }}\n                    {{ with .content }}<p class=\"mb-0\">{{ . | truncate 50 }}</p>{{ end }}\n                </li>\n            {{ end }}\n        </ul>\n\n    {{/* Render default timeline */}}\n    {{ else }}\n    <div class=\"timeline-container container p-0 d-none d-md-block {{ with $background }} timeline-{{ . }} {{ . }}{{ end }}{{ with $args.class }} {{ . }}{{ end }}\">\n        {{ $title | safeHTML }}\n        {{ range $index, $item := $data }}\n            <div class=\"row timeline timeline-{{ $item.color }} timeline-dot g-0 \">\n                {{- $params := dict \n                    \"page\"    $args.page\n                    \"content\" $item.content\n                    \"color\"   $item.color\n                    \"title\"   $item.title\n                    \"badge\"   $item.badge\n                    \"date\"    $item.date\n                    \"url\"     $item.url\n                }}\n                {{ if eq (mod $index 2) 1 }}\n                    {{ partial \"inline/timeline-panel.html\" (merge $params (dict \"direction\" \"start\")) }}\n                    {{ partial \"inline/timeline-icon.html\" (dict \"icon\" $item.icon \"direction\" \"start\") }}\n                {{ else }}\n                    {{ partial \"inline/timeline-icon.html\" (dict \"icon\" $item.icon \"direction\" \"end\") }}\n                    {{ partial \"inline/timeline-panel.html\" (merge $params (dict \"direction\" \"end\")) }}\n                {{ end }}\n            </div>\n            <div class=\"row timeline g-0 p-3\"> </div>\n        {{ end }}\n    </div>\n\n    {{/* Render timeline for smaller devices */}}\n    <div class=\"timeline-container container p-0 d-block d-md-none small{{ with $background }} timeline-bg-{{ . }} bg-{{ . }}{{ end }}{{ with $args.class }} {{ . }}{{ end }}\">\n        {{ range $index, $item := $data }}\n            <div class=\"row timeline-sm timeline-{{ $item.color }} timeline-dot g-0\">\n                {{ partial \"inline/timeline-icon.html\" (dict \"icon\" $item.icon \"class\" \"fa-2xl\" \"direction\" \"end\" \"col\" 3) }}\n                {{ partial \"inline/timeline-panel.html\" (dict\n                    \"page\"      $args.page\n                    \"content\"   $item.content\n                    \"color\"     $item.color\n                    \"title\"     $item.title\n                    \"badge\"     $item.badge\n                    \"date\"      $item.date\n                    \"url\"       $item.url\n                    \"direction\" \"end\"\n                    \"col\"       9\n                ) }}\n            </div>\n            <div class=\"row timeline-sm g-0 p-3\"> </div>\n        {{ end }}\n    </div>\n    {{ end }}{{/* end layout branch */}}\n{{ end }}"
  },
  {
    "path": "layouts/_partials/assets/toast.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{ $error := false }}\n\n{{/* Initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"toast\" \"args\" . \"group\" \"partial\")}}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\" \"assets/toast.html\" \n        \"warnid\"  \"warn-invalid-arguments\"\n        \"msg\"     \"Invalid arguments\"\n        \"details\" ($args.errmsg | append $args.warnmsg)\n        \"file\"    page.File\n    )}}\n    {{ $error = $args.err }}\n{{ end }}\n\n{{/* Initialize arguments */}}\n{{- $id := $args.id | default (printf \"toast-message-%d\" 0) -}}\n{{ $title := (or $args.title $args.header) | default site.Title -}}\n\n{{/* Main code */}}\n<div id=\"{{ $id }}\" class=\"toast{{ with $args.class }} {{ . }}{{ end }}\" role=\"alert\" aria-live=\"assertive\" aria-atomic=\"true\">\n    <div class=\"toast-header\">\n        {{ with $title }}<strong class=\"me-auto\">{{ . }}</strong>{{ end }}\n        <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"toast\" aria-label=\"{{ T \"close\" }}\"></button>\n    </div>\n    <div class=\"toast-body\">{{ $args.message }}</div>\n</div>\n"
  },
  {
    "path": "layouts/_partials/assets/toc-dropdown.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{ $error := false }}\n\n{{/* Initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"toc\" \"args\" . \"group\" \"partial\") }}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\" \"assets/toc.html\" \n        \"warnid\"  \"warn-invalid-arguments\"\n        \"msg\"     \"Invalid arguments\"\n        \"details\" ($args.errmsg | append $args.warnmsg)\n        \"file\"    page.File\n    )}}\n    {{ $error = $args.err }}\n{{ end }}\n\n{{/* Initialize local arguments */}}\n{{- $startLevel := or (.Site.Params.navigation.startLevel | int) 2 }}\n{{- $endLevel := or (.Site.Params.navigation.endLevel | int) 3 }}\n{{- $minNumHeadings := or (.Site.Params.navigation.minNumHeadings | int) 2 }}\n{{- $tocSort := partial \"utilities/GetThemeIcon.html\" (dict \"id\" \"tocSort\" \"default\" \"fas sort\") -}}\n\n{{/* Main code */}}\n{{ if not $error }}\n    {{ $headings := partial \"assets/toc-headings.html\" $args.page }}\n    {{- with $headings }}\n        {{- if and (not $error) (ge (len .) $minNumHeadings) }}\n        <div class=\"d-grid gap-2 mx-auto\">\n            {{ partial \"assets/button.html\" (dict \n                \"title\"       (T \"toc\") \n                \"color\"       \"secondary\" \n                \"outline\"     \"true\" \n                \"class\"       \"toc-button\" \n                \"icon\"        $tocSort\n                \"justify\"     \"between\"\n                \"collapse-id\" \"toc-collapse\"\n                \"order\"       \"last\"\n                \"spacing\"     false\n            ) -}}\n        </div>\n\n        <div class=\"collapse border bg-body-tertiary rounded p-1 navbar-nav-scroll\" id=\"toc-collapse\">\n            <small>\n                <div class=\"toc toc-panel text-body p-2\">\n                    {{- range . }}\n                        {{- $attrs := dict \"class\" (printf \"toc-item toc-level-%d\" (add 1 (sub .level $startLevel))) }}\n                        {{- with .id }}\n                            {{- $attrs = merge $attrs (dict \"href\" (printf \"%s#%s\" $args.page.RelPermalink .)) }}\n                        {{- end }}\n                        <a\n                        {{- range $k, $v := $attrs }}\n                            {{- printf \" %s=%q\" $k $v | safeHTMLAttr }}\n                        {{- end -}}\n                        >{{ .text }}</a>\n                    {{- end }}\n                </div>\n            </small>\n        </div>\n        {{- end }}\n    {{- end }}\n{{- end }}\n"
  },
  {
    "path": "layouts/_partials/assets/toc-headings.html",
    "content": "{{- /*\n  Copyright 2023 Veriphor, LLC\n  \n  Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n  use this file except in compliance with the License. You may obtain a copy of\n  the License at\n  \n  https://www.apache.org/licenses/LICENSE-2.0\n  \n  Unless required by applicable law or agreed to in writing, software\n  distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n  License for the specific language governing permissions and limitations under\n  the License.\n  */}}\n  \n  {{- /* Initialize. */}}\n  {{- $partialName := \"toc-headings\" }}\n  \n  {{- /* Verify minimum required version. */}}\n  {{- $minHugoVersion := \"0.125.6\" }}\n  {{- if lt hugo.Version $minHugoVersion }}\n    {{- errorf \"The %q partial requires Hugo v%s or later.\" $partialName $minHugoVersion }}\n  {{- end }}\n  \n  {{- /* Determine content path for warning and error messages. */}}\n  {{- $contentPath := \"\" }}\n  {{- with .File }}\n    {{- $contentPath = .Path }}\n  {{- else }}\n    {{- $contentPath = .Path }}\n  {{- end }}\n  \n  {{- /* Get configuration. */}}\n  {{- $startLevel := or (.Site.Params.navigation.startLevel | int) 2 }}\n  {{- $endLevel := or (.Site.Params.navigation.endLevel | int) 3 }}\n  \n  {{- /* Get headings. */}}\n  {{- $headings := slice }}\n  {{- $ids := slice }}\n  {{- range findRE `(?is)<h\\d.*?</h\\d>` .Content }}\n    {{- $level := substr . 2 1 | int }}\n    {{- if and (ge $level $startLevel) (le $level $endLevel) }}\n      {{- $text := replaceRE `(?is)<h\\d.*?>(.+?)</h\\d>` \"$1\" . }}\n      {{- $text = trim $text \" \" | plainify }}\n      {{/* Trim leading/trailing whitespace and &nbsp; entities — the icon partial\n           emits a trailing &nbsp; for spacing, which would otherwise indent the TOC label. */}}\n      {{- $text = replaceRE `^(?:\\s|&nbsp;)+|(?:\\s|&nbsp;)+$` \"\" $text | safeHTML }}\n      {{- $id := \"\" }}\n      {{- if findRE `\\s+id=` . }}\n        {{- $id = replaceRE `(?is).+?\\s+id=(?:\\x22|\\x27)?(.*?)(?:\\x22|\\x27)?[\\s>].+` \"$1\" . }}\n        {{- $ids = $ids | append $id }}\n        {{- if not $id }}\n          {{- errorf \"The %q partial detected that the %q heading has an empty ID attribute. See %s\" $partialName $text $contentPath }}\n        {{- end }}\n      {{- else }}\n        {{- errorf \"The %q partial detected that the %q heading does not have an ID attribute. See %s\" $partialName $text $contentPath }}\n      {{- end }}\n      {{- $headings = $headings | append (dict \"id\" $id \"level\" $level \"text\" $text) }}\n    {{- end }}\n  {{- end }}\n  \n  {{- /* Check for duplicate heading IDs. */}}\n  {{- $unique := slice }}\n  {{- $duplicates := slice }}\n  {{- range $ids }}\n    {{- if in $unique . }}\n      {{- $duplicates = $duplicates | append . }}\n    {{- else }}\n      {{- $unique = $unique | append . }}\n    {{- end }}\n  {{- end }}\n  {{- with $duplicates }}\n    {{- errorf \"The %q partial detected duplicate heading IDs (%s) in %s\" $partialName (delimit . \", \") $contentPath }}\n  {{- end }}\n  \n  {{ return $headings }}\n  "
  },
  {
    "path": "layouts/_partials/assets/toc-main.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{ $headings := .headings | default slice }}\n{{- range .Fragments.Headings }}\n    {{- range .Headings }}\n        {{- $headings = $headings | append .Title -}}\n    {{- end -}}\n{{- end -}}\n\n{{- if gt (len $headings) 1 }}\n<nav class=\"navbar navbar-expand navbar-services p-0 fs-5\">\n    <div class=\"container-fluid p-0 pb-3 border-bottom\">\n        <div class=\"collapse navbar-collapse\" id=\"navbarNav\">\n                <ul class=\"navbar-nav\">\n                    {{- range $headings }}\n                        <li class=\"nav-item\"><a class=\"nav-link\" href=\"#{{ anchorize . }}\">{{ . }}</a></li>\n                    {{- end }}\n                </ul>\n        </div>\n    </div>\n</nav>\n{{- end }}\n"
  },
  {
    "path": "layouts/_partials/assets/toc-parse-content.html",
    "content": "{{/* \n    Copyright © 2025 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{ define \"_partials/inline/toc-item.html\" }}\n    {{ $base := .base }}\n    {{ $startLevel := .startLevel }}\n    {{ $endLevel := .endLevel }}\n    {{ $item := .item }}\n    {{ $maxNumHeadings := .maxNumHeadings }}\n    {{ $result := .result | default slice }}\n\n    {{ if and (ge $item.Level $startLevel) (le $item.Level $endLevel) }}\n        {{- $attrs := dict \"class\" (printf \"toc-item toc-level-%d\" (add 1 (sub $item.Level $startLevel))) }}\n        {{- with $item.ID }}\n            {{/* Strip Hugo's HAHAHUGOSHORTCODE placeholder — see _markup/render-heading.html. */}}\n            {{- $cleanID := replaceRE `(?i)hahahugoshortcode\\d+s\\d+hbhb` \"-\" . -}}\n            {{- $cleanID = trim (replaceRE `-+` \"-\" $cleanID) \"-\" -}}\n            {{- $attrs = merge $attrs (dict \"href\" (printf \"%s#%s\" $base $cleanID)) }}\n        {{- end }}\n\n        {{ $htmlAttr := \"\" }}\n        {{ range $k, $v := $attrs }}{{ $htmlAttr = printf \"%s %s=%q\" $htmlAttr $k $v | safeHTMLAttr }}{{ end }}\n        {{- $cleanTitle := replaceRE `(?i)HAHAHUGOSHORTCODE\\d+s\\d+HBHB` \" \" $item.Title -}}\n        {{- $cleanTitle = trim (replaceRE `\\s+` \" \" $cleanTitle) \" \" -}}\n        {{ $rendered := printf \"<a %s>%s</a>\" $htmlAttr $cleanTitle }}\n        {{ $result = $result | append $rendered }}\n    {{ end }}\n\n    {{ if lt $item.Level $endLevel }}\n        {{ range $item.Headings }}\n            {{ $result = $result | append (partial \"inline/toc-item.html\" (dict\n                \"base\"           $base\n                \"item\"           .\n                \"startLevel\"     $startLevel\n                \"endLevel\"       $endLevel\n                \"maxNumHeadings\" $maxNumHeadings\n            )) }}\n        {{ end }}\n    {{ end }}\n\n    {{ return $result }}\n{{ end }}\n\n{{- /* Get configuration. */}}\n{{- $startLevel := or (.Site.Params.navigation.startLevel | int) 2 }}\n{{- $endLevel := or (.Site.Params.navigation.endLevel | int) 3 }}\n{{- $minNumHeadings := or (.Site.Params.navigation.minNumHeadings | int) 2 }}\n{{- $maxNumHeadings := or (.Site.Params.navigation.maxNumHeadings | int) 9 }}\n\n{{- /* Render */}}\n{{- if .Site.Params.navigation.toc }}\n    {{- /* Check for custom headings in Page.Store or Page.Params, otherwise use Page.Fragments */}}\n    {{- $customHeadings := .Page.Store.Get \"Headings\" }}\n    {{- $customHeadingsMap := .Page.Store.Get \"HeadingsMap\" }}\n    {{- if not $customHeadings }}\n        {{- $customHeadings = .Page.Params.Headings }}\n        {{- $customHeadingsMap = .Page.Params.HeadingsMap }}\n    {{- end }}\n\n    {{- $fragments := cond $customHeadings (dict \"Headings\" $customHeadings \"HeadingsMap\" $customHeadingsMap) .Page.Fragments }}\n\n    {{- with $fragments }}\n        {{- if (ge (len .HeadingsMap) $minNumHeadings) }}\n            <strong class=\"d-block mb-2\">{{ T \"toc\" }}</strong>\n            <nav class=\"toc\">\n                {{ $result := slice }}\n                {{ range .Headings }}\n                    {{ $result = $result | append (partial \"inline/toc-item.html\" (dict\n                        \"base\"           $.RelPermalink\n                        \"item\"           .\n                        \"startLevel\"     $startLevel\n                        \"endLevel\"       $endLevel\n                        \"maxNumHeadings\" $maxNumHeadings\n                    )) }}\n                {{ end }}\n\n                {{ range $i, $v := $result }}\n                    {{ if eq $i $maxNumHeadings }}\n                        {{ partial \"assets/button.html\" (dict\n                            \"id\"          \"btnTOCShowMore\"\n                            \"collapse-id\" \"toc-collapse-items\"\n                            \"link-type\"   \"link\"\n                            \"class\"       \"toc-item\"\n                            \"title\"       (T \"tocShowMore\" (sub (len $result) $i))\n                            \"spacing\"     false\n                        ) }}\n                        <div class=\"collapse\" id=\"toc-collapse-items\">\n                        {{ end }}\n                    {{ print $v | safeHTML }}\n                {{ end }}\n\n                {{ if gt (len $result) $maxNumHeadings }}\n                    &nbsp;\n                    {{ partial \"assets/button.html\" (dict\n                        \"id\"          \"btnTOCShowLess\"\n                        \"collapse-id\" \"toc-collapse-items\"\n                        \"link-type\"   \"link\"\n                        \"class\"       \"toc-item\"\n                        \"title\"       (T \"tocShowLess\")\n                        \"spacing\"     false\n                    ) }}\n                </div>{{ end }}\n            </nav>\n        {{ end }}\n    {{ end }}\n{{ end }}\n"
  },
  {
    "path": "layouts/_partials/assets/toc.html",
    "content": "{{/* \n    Copyright © 2024-2025 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{/* Initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"toc\" \"args\" . \"group\" \"partial\")}}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\" \"assets/toc.html\" \n        \"warnid\"  \"warn-invalid-arguments\"\n        \"msg\"     \"Invalid arguments\"\n        \"details\" ($args.errmsg | append $args.warnmsg)\n        \"file\"    page.File\n    )}}\n    {{ $error = $args.err }}\n{{ end }}\n\n{{/* Main code */}}\n{{ if not $args.err -}}\n    {{ partial \"assets/toc-parse-content.html\" $args.page }}\n{{ end -}}"
  },
  {
    "path": "layouts/_partials/assets/version.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{/* Retrieves the Hinode theme version from the site's go.mod file (when initialized as module.) */}}\n{{- define \"_partials/inline/mod-version.html\" -}}\n    {{- $file := \"go.mod\" -}}\n    {{- $regex := printf `github.com/gethinode/hinode(\\/v[0-9]+)? v.*(\\r\\n|\\r|\\n)` -}}\n    {{- $match := findRE $regex (readFile $file) -}}\n\n    {{- $result := \"\" -}}\n    {{- if gt (len $match) 0 -}}\n        {{- $result = (index (split (index $match 0) \" \") 1) -}}\n        {{- $result = strings.TrimPrefix \"v\" $result -}}\n    {{- end -}}\n\n    {{- return $result -}}\n{{- end -}}\n\n{{/* \n    Fallback to initialize the Hinode version from an environment variable. This applies to the main\n    Hinode repository including the example site (which is published to demo.gethinode.com). The following\n    command initializes the HUGO_HINODE_VERSION using the relevant git tag on macOS/Linux:\n    HUGO_HINODE_VERSION=$(git describe --tags $(git rev-list --tags --max-count=1)) npm run build:example\n*/}}\n{{- define \"_partials/inline/env-version.html\" -}}\n    {{ return getenv \"HUGO_HINODE_VERSION\"  }}\n{{- end -}}\n\n{{- $version := partial \"inline/mod-version.html\" . -}}\n{{ if not $version }}\n    {{- $version = partial \"inline/env-version.html\" . | default \"unknown-revision\" -}}\n{{ end }}\n{{- print $version -}}\n"
  },
  {
    "path": "layouts/_partials/assets/video.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n\n    This source code adapts the original embedded shortcode as maintained by the Hugo repository. It introduces the\n    following modifications:\n     - Isolated the styles to comply with the Content Security Policy\n     - Added validation of shortcode arguments\n     - Added support to retrieve the title from the video metadata\n     - Adjusted autoplay configuration\n     - Modified the layout\n    \n    The original source code is available on:\n    https://github.com/gohugoio/hugo/tpl/tplimpl/embedded/templates/shortcodes/youtube.html\n    https://github.com/gohugoio/hugo/tpl/tplimpl/embedded/templates/shortcodes/vimeo.html\n    Copyright 2022 The Hugo Authors. Licensed under the Apache License, Version 2.0.\n*/}}\n\n{{ $error := false }}\n\n{{/* Initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"video\" \"args\" . \"group\" \"partial\")}}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\" \"assets/video.html\" \n        \"warnid\"  \"warn-invalid-arguments\"\n        \"msg\"     \"Invalid arguments\"\n        \"details\" ($args.errmsg | append $args.warnmsg)\n        \"file\"    page.File\n    )}}\n    {{ $error = $args.err }}\n{{ end }}\n\n{{/* Initialize local arguments */}}\n{{- $title := $args.title -}}\n{{- $provider := or $args.host $args.provider }}\n{{- $account := $args.account }}\n{{ if not $account }}\n    {{ with index $args.page.Site.Params.videos $provider }}\n        {{ with index . \"account\" }}{{ $account = . }}{{ end }}\n    {{ end }}\n{{ end }}\n{{- $pc := \"\" -}}\n{{- if eq $provider \"youtube\" }}\n    {{- $pc = $args.page.Site.Config.Privacy.YouTube -}}\n{{- else if eq $provider \"vimeo\" }}\n    {{- $pc = $args.page.Site.Config.Privacy.Vimeo -}}\n{{- end -}}\n{{- $id := or $args.mediaId $args.id -}}\n{{ if not $id }}\n    {{- errorf \"partial [assets/video.html] - Missing media ID\" -}}\n    {{ $error = true }}\n{{ end }}\n\n{{ if and (eq $provider \"youtube\") ($pc.Disable) }}\n    {{- errorf \"partial [assets/video.html] - YouTube video disabled in site's privacy settings\" -}}\n    {{ $error = true }}\n{{ else if and (eq $provider \"vimeo\") ($pc.Disable) }}\n    {{- errorf \"partial [assets/video.html] - Vimeo video disabled in site's privacy settings\" -}}\n    {{ $error = true }}\n{{ end }}\n\n{{ $queryArgs := or $args.queryArgs $args.options }}\n{{ $origin := $args.position }}\n{{ if not $origin }}{{ with $args.page.File }}{{ $origin = $args.Path }}{{ end }}{{ end }}\n\n{{/* Main code */}}\n{{ if not $error -}}\n    {{ if eq $provider \"youtube\" }}\n        {{- $host := cond $pc.PrivacyEnhanced \"www.youtube-nocookie.com\" \"www.youtube.com\" -}}\n        {{ $url := printf \"https://%s/embed/%s?origin=%s\" $host $id $args.page.Site.BaseURL }}\n        {{ $api := printf \"https://www.youtube.com/oembed?format=json&url=%s\" (printf \"https://www.youtube.com/watch?v=%s\" $id) }}\n        {{ $padding := \"56.25%\" }}\n\n        {{ with try (resources.GetRemote $api) }}\n            {{ with .Err }}\n                {{ errorf \"Unable to parse video metadata '%q': %s\\n  %s\" $api $origin . }}\n            {{ else }}\n                {{ $data := .Value | transform.Unmarshal }}\n                {{ if $args.autotitle }}{{ with $data.title }}{{ $title = . }}{{ end }}{{ end }}\n                {{ if and $data.height $data.width }}{{ $padding = printf \"%.2f%%\" (mul (div $data.height $data.width) 100) }}{{ end }}\n            {{ end }}\n        {{ else }}\n            {{ errorf \"Unable to get video metadata '%q': %s\" $api $origin }}\n        {{ end }}\n\n        <div class=\"video-embedded {{ $args.class }}\" data-video-padding=\"{{ $padding }}\">\n            <iframe src=\"{{ $url }}{{ if $args.autoplay }}&autoplay=1&mute=1{{ end }}\"\n                allowfullscreen title=\"{{ $args.title }}\" {{ if $args.autoplay }}allow=\"autoplay\"{{ end }}>\n            </iframe>\n        </div>\n    {{ else if eq $provider \"vimeo\" }}\n        {{ $url := printf \"https://player.vimeo.com/video/%s\" $id }}\n        {{ $params := \"\" }}\n        {{ if $args.autoplay }}{{ $params = print $params \"&autoplay=1&muted=1\" }}{{ end }}\n        {{ if $pc.EnableDNT }}{{ $params = print $params \"&dnt=1\" }}{{ end }}\n        {{ $params = strings.TrimPrefix \"&\" $params }}\n        {{ with $params }}{{ $url = printf \"%s?%s\" $url . }}{{ end }}\n        {{ $padding := \"56.25%\" }}\n\n        {{- $dnt := cond $pc.EnableDNT 1 0 -}}\n        {{- $query := querify \"url\" $url \"dnt\" $dnt -}}\n        {{- $api := printf \"https://vimeo.com/api/oembed.json?%s\" $query -}}\n        {{- with try (resources.GetRemote $api) -}}\n            {{ with .Err }}\n                {{ errorf \"Unable to parse video metadata '%q': %s\\n  %s\" $api $origin . }}\n            {{ else }}\n                {{ $data := .Value | transform.Unmarshal }}\n                {{ if $args.autotitle }}{{ with $data.title }}{{ $title = . }}{{ end }}{{ end }}\n                {{ if and $data.height $data.width }}{{ $padding = printf \"%.2f%%\" (mul (div $data.height $data.width) 100) }}{{ end }}\n            {{ end }}\n        {{- end -}}\n\n        <div class=\"video-embedded {{ $args.class }}\" data-video-padding=\"{{ $padding }}\">\n            <iframe src=\"{{ $url | safeHTMLAttr }}\" title=\"{{ $args.title }}\" webkitallowfullscreen mozallowfullscreen allowfullscreen>\n            </iframe>\n        </div>\n    {{ else if eq $provider \"cloudinary\" }}\n        {{ if not $account }}\n            {{ errorf \"Missing account name for Cloudinary video '%s': %s\" $id $origin }}\n        {{ end }}\n\n        {{ $url := printf \"https://player.cloudinary.com/embed/?cloud_name=%s&public_id=%s\" $account $id }}\n        {{ $params := \"\" }}\n        {{ if $args.autoplay }}{{ $params = print $params \"&player[autoplay]=true&player[muted]=true\" }}{{ end }}\n\n        {{ $codecs := slice }}\n        {{ with index site.Params \"dam\" }}{{ with index . \"videoCodecs\" }}{{ $codecs = . }}{{ end }}{{ end }}\n        {{ range $k, $v := $codecs }}\n            {{ $params = printf \"%s&source[source_types][%d]=%s\" $params $k (urlquery $v) }}\n        {{ end }}\n        {{ if gt (len $codecs) 0 }}\n            {{ $params = print $params \"&source[transformation][1][quality]=auto\" }}\n        {{ end }}\n\n        {{ with $queryArgs }}{{ $params = print $params \"&\" . }}{{ end }}\n        {{ $params = strings.TrimLeft \"?&\" $params }}\n        {{ with $params }}{{ $url = print $url \"&\" . }}{{ end }}\n        {{ $padding := \"56.25%\" }}\n\n        {{ $thumbnail := partial \"utilities/URLJoin.html\" (dict \"base\" (path.Dir $id) \"path\" (printf \"%s.jpg\" (path.BaseName $id))) }}\n        {{ $metadata := partial \"assets/helpers/image-dimension.html\" (dict \n            \"page\"     $args.page\n            \"src\"      (printf \"https://res.cloudinary.com/%s/video/upload/%s\" $account (path.Clean $thumbnail))\n            \"ratio\"    $args.ratio\n            \"imageset\" false\n        ) }}\n        {{ $height := index $metadata \"height\" }}\n        {{ $width := index $metadata \"width\" }}\n        {{ if and $height $width }}\n            {{ $padding := printf \"%.2f%%\" (mul (div (float $height) $width) 100) }}\n            {{ if not $title }}{{ $title = printf \"Cloudinary video '%s'\" (path.BaseName $id) }}{{ end }}\n\n            <div class=\"video-embedded {{ $args.class }}\" data-video-padding=\"{{ $padding }}\">\n                <iframe src=\"{{ $url | safeURL }}\" title=\"{{ $title }}\" allow=\"autoplay; fullscreen; encrypted-media\" frameborder=\"0\">\n                </iframe>\n            </div>\n        {{ else }}\n            {{ errorf \"Cannot retrieve metadata of Cloudinary video '%s' with account '%s': %s\" $id $account $origin }}\n        {{ end }}\n    {{ else }}\n        {{ warnf \"partial [assets/video.html] - Unsupported video provider: %s\" $provider }}\n    {{ end }}\n{{ end -}}\n"
  },
  {
    "path": "layouts/_partials/footer/footer.html",
    "content": "<footer class=\"container-fluid footer text-center p-3\">\n    <div class=\"container-xxl text-center\">\n        <small>\n            {{- $copyright := printf \"%s © %s %s %s.\" (T \"copyright\") (dateFormat \"2006\" now) .Site.Title (T \"rights\") }}\n            {{ cond (gt (len .Site.Copyright) 0) .Site.Copyright $copyright }}\n            {{ .Site.Params.footer.license | safeHTML }} |\n            {{ if .Site.Params.main.endorse }}\n                {{ $link := partial \"assets/link.html\" (dict\n                    \"href\" (index site.Params.links \"hinode\")\n                    \"text\" \"Hinode\"\n                    \"class\" \"link-bg-footer\"\n                    \"page\" .Page\n                ) }}\n                {{ T \"poweredBy\" $link | safeHTML }}\n            {{ end }}\n        </small>\n    </div>\n</footer>"
  },
  {
    "path": "layouts/_partials/footer/scripts.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{- $error := false -}}\n\n{{/* Define inline partials */}}\n{{- define \"_partials/inline/match.html\" -}}\n    {{- $result := \"\" -}}\n    {{- $matches := slice -}}\n    {{- if gt (len .modules) 0 -}}\n        {{- range .modules -}}\n            {{- $matches = $matches | append (printf \"js/modules/%s/**.*js\" .) -}}\n        {{- end -}}\n        {{- $result = printf \"{%s}\" (delimit $matches \",\") -}}\n    {{- end -}}\n\n    {{- return $result -}}\n{{- end -}}\n\n{{- define \"_partials/inline/bundle-script.html\" -}}\n    {{- $page := .page -}}\n    {{- $match := .match -}}\n    {{- $destination := .destination -}}\n    {{- $cat := .cat -}}\n    {{- $localize := .localize -}}\n    {{- $modules := .modules -}}\n    {{- $skipTemplate := .skipTemplate -}}\n    {{- $enableTemplate := .enableTemplate }}\n    {{- $absoluteURL := .absoluteURL -}}\n    {{- $state := cond (ne .state \"immediate\") .state \"\" -}}\n\n    {{- if and $cat (ne $cat \"other\") -}}\n        {{- $destination = path.Join (path.Dir $destination) (printf \"%s-%s%s\" (path.BaseName $destination) $cat (path.Ext $destination)) -}}\n    {{- end -}}\n\n    {{- if $localize -}}\n        {{- $destination = path.Join (path.Dir $destination) (printf \"%s.%s%s\" (path.BaseName $destination) $page.Language.Lang (path.Ext $destination)) -}}\n    {{- end -}}\n\n    {{- $bundle := partialCached \"utilities/bundlev2.html\" (dict\n        \"page\"            $page\n        \"match\"           $match\n        \"filename\"        $destination\n        \"modules\"         $modules\n        \"basepath\"        \"js/modules\"\n        \"all\"             true\n        \"skip-template\"   $skipTemplate\n        \"enable-template\" $enableTemplate\n        \"debugging\"       site.Params.debugging.showJS\n    ) $destination (delimit $modules \",\") -}}\n    {{- $js := $bundle.bundle -}}\n    {{- $jsmod := $bundle.module -}}\n\n    {{/* Strip js and Hugo comments then trim whitespace to detect whether the bundle contains actual code. A bundle\n        that renders to comments only would otherwise produce a fingerprint of empty content while hugo server serves\n         the unminified comment, causing an SRI/CSP integrity mismatch. */}}\n    {{- $jsCode := $js.Content | replaceRE `(?m)//[^\\n]*` \"\" | replaceRE `(?s)/\\*.*?\\*/` \"\" | strings.TrimSpace -}}\n    {{- if gt (len $jsCode) 0 -}}\n        {{- $integrity := \"\" -}}\n        {{- if hugo.IsProduction -}}\n            {{- $js = $js | minify | fingerprint -}}\n            {{- $integrity = $js.Data.Integrity -}}\n        {{- end -}}\n\n        {{- partial \"templates/script.html\" (dict\n            \"link\"        (cond $absoluteURL $js.Permalink $js.RelPermalink)\n            \"category\"    $cat\n            \"state\"       $state\n            \"integrity\"   $integrity\n        ) -}}\n    {{- end -}}\n\n    {{- $jsmodCode := $jsmod.Content | replaceRE `(?m)//[^\\n]*` \"\" | replaceRE `(?s)/\\*.*?\\*/` \"\" | strings.TrimSpace -}}\n    {{- if gt (len $jsmodCode) 0 -}}\n        {{- $integrity := \"\" -}}\n        {{- if hugo.IsProduction -}}\n            {{- $jsmod = $jsmod | minify | fingerprint -}}\n            {{- $integrity = $jsmod.Data.Integrity -}}\n        {{- end -}}\n\n        {{- partial \"templates/script.html\" (dict\n            \"link\"        (cond $absoluteURL $jsmod.Permalink $jsmod.RelPermalink)\n            \"category\"    $cat\n            \"state\"       $state\n            \"integrity\"   $integrity\n            \"script-type\" \"module\"\n        ) -}}\n    {{- end -}}\n{{- end -}}\n\n{{/* Initialize arguments */}}\n{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"scripts\" \"args\" .) -}}\n{{- if $args.err -}}\n    {{- partial \"utilities/LogErr.html\" (dict \n        \"partial\" \"footer/scripts.html\" \n        \"msg\"     \"Invalid arguments\"\n        \"details\" $args.errmsg\n        \"file\"    page.File\n    )}}\n    {{- $error = true -}}\n{{- end -}}\n\n{{/* Initialize local arguments */}}\n{{- $patterns := dict \n    \"other\"         \"js/critical/*.*js\"\n    \"functional\"    \"js/critical/functional/**.*js\"\n    \"analytics\"     \"js/critical/analytics/**.*js\"\n    \"performance\"   \"js/critical/performance/**.*js\"\n    \"advertisement\" \"js/critical/advertisement/**.*js\"\n    \"core\"          \"{js/*.*js,js/vendor/**.*js}\"\n}}\n\n{{- $absoluteURL := site.Params.main.canonifyAssetsURLs | default false -}}\n{{- $state := \"immediate\" -}}\n{{- $config := $args.page.Scratch.Get \"modules\" -}}\n\n{{- $page_modules := slice -}}\n{{- if reflect.IsMap $args.page.Params.modules -}}\n    {{- $page_modules = $args.page.Params.modules -}}\n{{- else -}}\n    {{- $page_modules = $page_modules | append $args.page.Params.modules -}}\n{{- end -}}\n{{- with $args.page.Scratch.Get \"dependencies\" -}}{{- $page_modules = append $page_modules . | uniq -}}{{- end -}}\n\n{{- $categories := dict \"other\" slice -}}\n\n{{- $modules := slice -}}\n{{- if eq $args.type \"critical\" -}}\n    {{- $modules = $config.critical -}}\n    {{- $categories = merge $categories (dict \"functional\" slice \"analytics\" slice \"performance\" slice \"advertisement\" slice) -}}\n{{- else if eq $args.type \"core\" -}}\n    {{- $modules = $config.core -}}\n{{- else if eq $args.type \"optional\" -}}\n    {{- $modules = $config.optional | intersect $page_modules  -}}\n{{- end -}}\n\n{{- range $cat, $val := $config.categories -}}\n    {{- $categories = merge $categories (dict $cat (intersect $val $modules)) -}}\n{{- end -}}\n\n{{- $localize := false -}}\n{{- if gt (intersect (or $config.localize slice) $modules | len) 0 }}{{ $localize = true }}{{ end -}}\n\n{{- $skipTemplate := false -}}\n{{- if gt (intersect (or $config.skipTemplate slice) $modules | len) 0 }}{{ $skipTemplate = true }}{{ end -}}\n\n{{/* Main code */}}\n{{- if not $error -}}\n    {{/* include external scripts first */}}\n    {{- range $mod, $cfg := $config.modules -}}\n        {{- if in $modules $mod -}}\n            {{- if or (index $cfg \"local\") (not hugo.IsServer) -}}\n                {{- with index $cfg \"url\" -}}\n                    {{- partial \"templates/script.html\" (dict\n                        \"link\"     .\n                        \"category\" (index $cfg \"category\")\n                        \"state\"    (index $cfg \"state\")) \n                    -}}\n                {{- end -}}\n            {{- end -}}\n        {{- end -}}\n    {{- end -}}\n\n    {{/* Bundle the critical and core scripts by category */}}\n    {{- if ne $args.type \"optional\" -}}\n        {{- range $cat, $val := $categories -}}\n            {{- if or (gt ($val | len) 0) (eq $args.type \"critical\") -}}\n                {{- $match := \"\" -}}\n                {{- if eq $args.type \"critical\" -}}\n                    {{- $match = index $patterns $cat -}}\n                {{- else if eq $cat \"other\" -}}\n                    {{- $match = index $patterns $args.type -}}\n                {{- end -}}\n\n                {{- partial \"inline/bundle-script.html\" (dict \n                    \"page\"           $args.page\n                    \"match\"          $match\n                    \"destination\"    (printf \"js/%s.bundle.js\" $args.type)\n                    \"cat\"            $cat\n                    \"modules\"        $val\n                    \"localize\"       $localize\n                    \"skipTemplate\"   $skipTemplate\n                    \"absoluteURL\"    $absoluteURL\n                    \"state\"          (cond (eq $args.type \"critical\") \"immediate\" \"async\")\n                )}} \n            {{- end -}}\n        {{- end -}}\n    {{- else -}}\n        {{/* Bundle the optional scripts by module name and category */}}\n        {{- range $cat, $val := $categories -}}\n            {{- range $val -}}\n                {{- $modconfig := index $config.modules . -}}\n                {{- partial \"inline/bundle-script.html\" (dict \n                    \"page\"           $args.page\n                    \"destination\"    (printf \"js/%s.js\" .)\n                    \"cat\"            $cat\n                    \"modules\"        (slice .)\n                    \"localize\"       $modconfig.localize\n                    \"skipTemplate\"   $modconfig.disabletemplate\n                    \"enableTemplate\" $modconfig.enableTemplate\n                    \"absoluteURL\"    $absoluteURL\n                    \"state\"          $modconfig.state\n                )}} \n            {{- end -}}\n        {{- end -}}\n    {{- end -}}\n{{- end -}}"
  },
  {
    "path": "layouts/_partials/footer/social.html",
    "content": "{{ if gt .Site.Menus.social 0 }}\n    {{- $padding := partial \"utilities/GetPadding.html\" -}}\n    {{- $tab := site.Params.main.externalLinks.tab -}}\n    <div class=\"container-fluid bg-primary bg-opacity-{{ .Site.Params.style.themeOpacity | default \"25\" | safeHTML }}\">\n        <div class=\"container-xxl px-{{ $padding.x }} px-xxl-0\">\n            <div class=\"row row-cols-2 py-3 align-items-center\">\n                <div class=\"col col-6\">\n                    <div class=\"row justify-content-end p-0\">\n                        <div class=\"col-12 col-md-8 p-0\">\n                            {{- $title := or .Site.Params.footer.socialTitle .Site.Params.social.title }}\n                            {{ if and site.Params.main.titleCase (not .Page.Params.exact) }}{{ $title = title $title }}{{ end }}\n                            <div class=\"fs-3 fw-bold\">{{ $title }}</div>\n                            <p>{{ or .Site.Params.footer.socialCaption .Site.Params.social.caption }}</p>\n                        </div>\n                    </div>\n                </div>\n                <div class=\"col col-6 text-sm-start\">\n                    {{ range .Site.Menus.social -}}\n                        <a href=\"{{ .URL }}\" {{ if $tab }} target=\"_blank\" rel=\"noopener noreferrer nofollow\"{{ end }} aria-label=\"{{ .Name | safeHTML }}\" class=\"text-decoration-none link-secondary d-inline p-2\">\n                            {{ if hasPrefix .Pre \"<i\" }}\n                                {{ .Pre | safeHTML }}\n                            {{ else }}\n                                {{ partial \"assets/icon.html\" (dict \"icon\" (string .Pre) \"class\" \"fa-2x\") }}\n                            {{ end }}\n                        </a>\n                    {{ end -}}\n                </div>\n            </div>\n        </div>\n    </div>\n{{ end }}"
  },
  {
    "path": "layouts/_partials/footer/toast-container.html",
    "content": "{{/* \n    Defines a container to stack toast messages. By default, toast messages are displayed in the bottom right of the\n    viewport. Multiple toast messages are stacked vertically. Adjust the configuration by adjusting 'messages' in the\n    site parameters. The following arguments are supported:\n    \"placement\"     Optional position of the toast messages relative to the viewport: \"top-left\", \"top-center\",\n                    \"top-right\", \"middle-left\", \"middle-center\", \"middle-right\", \"bottom-left\", \"bottom-center\", or\n                    \"bottom-right\" (default).\n*/}}\n\n{{- $placement := \"bottom-right\" -}}\n{{- $position := \"bottom-0 end-0\" -}}\n{{- with site.Params.messages.placement }}{{ $placement = . }}{{ end -}}\n{{- $supportedPlacements := slice \"top-left\" \"top-center\" \"top-right\" \"middle-left\" \"middle-center\" \"middle-right\" \"bottom-left\" \"bottom-center\" \"bottom-right\" -}}\n{{- if not (in $supportedPlacements $placement) -}}\n    {{- errorf \"partial [footer/toast-container.html] - Invalid value for param 'placement': %s\" $placement -}}\n{{- end -}}\n\n{{- if eq $placement \"top-left\" }}{{ $position = \"top-0 start-0\" -}}\n{{- else if eq $placement \"top-center\" }}{{ $position = \"top-0 start-50 translate-middle-x\" -}}\n{{- else if eq $placement \"top-right\" }}{{ $position = \"top-0 end-0\" -}}\n{{- else if eq $placement \"middle-left\" }}{{ $position = \"top-50 start-0 translate-middle-y\" -}}\n{{- else if eq $placement \"middle-center\" }}{{ $position = \"top-50 start-50 translate-middle\" -}}\n{{- else if eq $placement \"middle-right\" }}{{ $position = \"top-50 end-0 translate-middle-y\" -}}\n{{- else if eq $placement \"bottom-left\" }}{{ $position = \"bottom-0 start-0\" -}}\n{{- else if eq $placement \"bottom-center\" }}{{ $position = \"bottom-0 start-50 translate-middle-x\" -}}\n{{- else if eq $placement \"bottom-right\" }}{{ $position = \"bottom-0 end-0\" -}}\n{{- end -}}\n\n<div id=\"toast-container\" class=\"toast-container position-fixed {{ $position }} p-3\">\n    {{- partial \"assets/toast.html\" (dict \"id\" \"toast-copied-code-message\" \"message\" (printf \"%s %s\" (T \"code\")  (T \"copiedToClipboard\"))) -}}\n</div>\n"
  },
  {
    "path": "layouts/_partials/head/favicon.html",
    "content": "{{/* Source: https://davelage.com/posts/hugo-favicons/ */}}\n{{- $absoluteURL := site.Params.main.canonifyAssetsURLs | default false -}}\n{{ if .Site.Params.favicon.logo -}}\n    {{ $favicon := resources.Get .Site.Params.favicon.logo -}}\n    {{- if $favicon -}}\n        {{ range $i := .Site.Params.favicon.sizes -}} \n            {{ $image := $favicon.Resize (printf \"%dx%d CatmullRom\" $i $i) -}}\n            <link rel=\"icon\" type=\"image/png\" sizes=\"{{$i}}x{{$i}}\" href=\"{{ if $absoluteURL }}{{ $image.Permalink }}{{ else }}{{ $image.RelPermalink }}{{ end }}\">\n        {{ end -}} \n        {{ $image := $favicon.Resize \"180x CatmullRom\" -}}\n        <link rel=\"apple-touch-icon\" sizes=\"180x180\" href=\"{{ if $absoluteURL }}{{ $image.Permalink }}{{ else }}{{ $image.RelPermalink }}{{ end }}\">\n    {{ else }}\n        {{- errorf \"partial [head/favicon.html] - Cannot find file: %s\" .Site.Params.favicon.logo -}}\n    {{ end }}\n{{ end -}}"
  },
  {
    "path": "layouts/_partials/head/head.html",
    "content": "{{ define \"head\" }}\n    {{- $version := strings.TrimSpace (partialCached \"assets/version.html\" . \"version\") -}}\n    {{ $desc := .Page.Description | default (.Page.Content | safeHTML | truncate 150) -}}\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    {{ hugo.Generator }}\n    <meta name=\"theme\" content=\"{{ printf \"Hinode %s\" $version }}\">\n    {{ partialCached \"head/stylesheet-core.html\" . -}}\n\n    {{ $config := page.Scratch.Get \"modules\" }}\n    {{ if not $config }}\n        {{ errorf \"partial [head/head.html] - Cannot initialize module configuration\" }}\n    {{ end }}\n        \n    {{ $page_modules := slice | append .Page.Params.modules }}\n    {{ with .Scratch.Get \"dependencies\" }}{{ $page_modules = append $page_modules . | uniq }}{{ end }}\n    {{- $modules := $config.optional | intersect $page_modules -}}\n    {{- range $index, $mod := $modules -}}\n        {{- $source := printf \"scss/%s.scss\" $mod -}}\n        {{- $target := printf \"css/%s.css\" $mod -}}\n        {{- partial \"head/stylesheet.html\" (dict \"source\" $source \"target\" $target \"core\" false \"page\" .) }}\n    {{- end -}}\n    {{- if hasPrefix (lower .Site.Params.style.themeFontPath) \"http\" -}}\n        <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\"> \n        <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin> \n        <link rel=\"stylesheet\" href=\"{{ .Site.Params.style.themeFontPath | default \"https://fonts.googleapis.com/css2?family=Inter:wght@200;300;600&display=swap\" }}\">\n    {{ else if .Site.Params.style.themeFontPreload }}\n        {{ $fonts := slice | append .Site.Params.style.themeFontPreload }}\n        {{ range $fonts }}\n            {{ $font := partial \"utilities/GetStaticURL\" (dict \"url\" .) }} \n            <link rel=\"preload\" href=\"{{ $font }}\" as=\"font\" type=\"font/{{ strings.TrimPrefix \".\" (path.Ext $font) }}\" crossorigin>\n        {{ end }}\n    {{- end -}}\n    {{ partial \"head/seo.html\" . }}\n    {{ partialCached \"head/favicon.html\" . -}}\n    {{ if gt (len .Site.Languages) 1}}\n    <meta name=\"lang\" content=\"{{ .Site.Language }}\">\n    {{ end }}\n{{ end }}"
  },
  {
    "path": "layouts/_partials/head/icons.html",
    "content": "{{/* \n    Generate vector icons from asset templates. It processes all svg files in the \"assets/icons\" folder and replaces\n    color references with their actual value. Color references should be defined in the provided css string as regular\n    css variables within a root section called \":hinode-theme\". For example, the following section defines a regular\n    hex value and an rgba color code for two variables:\n\n    :hinode-theme {\n        --accordion-icon-active-color: #bf3300;\n        --navbar-dark-color: rgba(255, 255, 255, 0.55);\n    }\n\n    Variable names are converted from kebab case to snake case to make them compatible with Hugo's variable naming\n    convention. For example, the css variable '--accordion-icon-active-color' is available as \n    '.accordion_icon_active_color' within the Hugo template. The processed svg files are published to the \"icons\"\n    folder.\n    \n    The partial supports the following arguments:\n    \"css\":          Required css string content.\n*/}}\n\n{{- $css := .css -}}\n{{- $content := findRE \":hinode-theme\\\\s?{[^}]+}\" $css.Content -}}\n{{- $items := split (index $content 0) \";\" -}}\n{{- $params := dict -}}\n{{- range $index, $item := $items -}}\n    {{- $clean := trim $item \"- \\r\\n{}\" -}}\n    {{- $clean = strings.TrimPrefix \":hinode-theme\" $clean -}}\n    {{- $clean = trim $clean \"- \\r\\n{}\" -}}\n    {{- $clean = replace $clean \"-\" \"_\" -}}\n    {{- with $clean -}}\n        {{- $pair := split . \":\" -}}\n        {{- $key := trim (index $pair 0) \" \" -}}\n        {{- $value := trim (index $pair 1) \" \" -}}\n        {{- $params = merge $params (dict $key $value) -}}\n    {{- end }}\n{{- end -}}\n\n{{ $base := partial \"utilities/GetStaticURL\" (dict \"url\" \"/\") }}\n{{- range resources.Match \"icons/**.svg\" -}}\n    {{- $target := strings.TrimPrefix $base .RelPermalink -}}\n    {{- $icon := . | resources.ExecuteAsTemplate $target $params -}}\n    {{- $icon.Publish -}}\n{{- end -}}"
  },
  {
    "path": "layouts/_partials/head/opengraph.html",
    "content": "{{/* Copied from doks */}}\n<meta property=\"og:locale\" content=\"{{ .Site.Params.opengraph.locale }}\">\n<meta property=\"og:type\" content=\"{{ if .IsPage }}article{{ else }}website{{ end }}\">\n<meta property=\"og:title\" content=\"{{ $.Scratch.Get \"title\" }}\">\n<meta property=\"og:description\" content=\"{{ $.Scratch.Get \"description\" }}\">\n{{ $paginator := $.Store.Get \"paginator\" }}\n{{ if $paginator }}\n    <meta property=\"og:url\" content=\"{{ $paginator.URL | absURL }}\">\n{{ else -}}\n    <meta property=\"og:url\" content=\"{{ .Permalink }}\">\n{{ end -}}\n{{ with .Site.Title -}}\n    <meta property=\"og:site_name\" content=\"{{ . }}\">\n{{ end -}}\n\n{{ $iso8601 := \"2006-01-02T15:04:05-07:00\" -}}\n{{ if .IsPage -}}\n    {{ if not .PublishDate.IsZero -}}\n        <meta property=\"article:published_time\" {{ .PublishDate.Format $iso8601 | printf \"content=%q\" | safeHTMLAttr }}>\n    {{ else if not .Date.IsZero -}}\n        <meta property=\"article:published_time\" {{ .Date.Format $iso8601 | printf \"content=%q\" | safeHTMLAttr }}>\n    {{ end -}}\n    {{ if not .Lastmod.IsZero -}}\n        <meta property=\"article:modified_time\" {{ .Lastmod.Format $iso8601 | printf \"content=%q\" | safeHTMLAttr }}>\n    {{ end -}}\n{{ else -}}\n    {{ if not .Date.IsZero -}}\n        <meta property=\"og:updated_time\" {{ .Lastmod.Format $iso8601 | printf \"content=%q\" | safeHTMLAttr }}>\n    {{ end -}}\n{{ end -}}\n\n<meta property=\"og:image\" content=\"{{ $.Scratch.Get \"thumbnail\" }}\">\n<meta property=\"og:image:alt\" content=\"{{ $.Scratch.Get \"title\" }}\">\n\n{{ with .Params.audio -}}\n    <meta property=\"og:audio\" content=\"{{ . | absURL }}\">\n{{ end -}}\n\n{{ with .Params.videos -}}\n    {{ range . -}}\n        <meta property=\"og:video\" content=\"{{ . | absURL }}\">\n    {{ end -}}\n{{ end -}}\n"
  },
  {
    "path": "layouts/_partials/head/seo.html",
    "content": "{{/* TODO: replace scratch with dict */}}\n\n{{/* Adapted from doks */}}\n{{ with .Params.meta.title }}\n    {{ $title := . }}\n    {{ if and site.Params.main.titleCase (not $.Params.exact) }}{{ $title = title $title }}{{ end }}\n    {{ $.Scratch.Set \"title\" $title -}}\n{{ else }}\n    {{ $title := .Title | default .Site.Title }}\n    {{ if and site.Params.main.titleCase (not $.Params.exact) }}{{ $title = title $title }}{{ end }}\n    {{ $.Scratch.Set \"title\" $title -}}\n{{ end }}\n\n{{ $description := or (partial \"utilities/GetDescription.html\" (dict \"page\" . \"meta\" true)) .Site.Params.main.description }}\n{{ if gt (strings.RuneCount $description) 150 }}\n    {{ $description = print (substr $description 0 150) \"...\" }}\n{{ end }}\n{{ $.Scratch.Set \"description\" $description -}}\n\n{{- $thumbnail := \"\" -}}\n{{ if reflect.IsMap .Params.Thumbnail }}{{ $thumbnail = .Params.Thumbnail.url }}{{ else }}{{ $thumbnail = .Params.Thumbnail }}{{ end }}\n\n{{ if $thumbnail -}}\n    {{ $imgURL := index (partial \"assets/helpers/image-dimension.html\" (dict \"src\" $thumbnail \"image-width\" 1280 \"image-height\" 640 \"page\" .)) \"target\" }}\n    {{ $.Scratch.Set \"thumbnail\" ($imgURL | absURL) -}}\n{{ else -}}\n    {{ with .Site.Params.schema.image.url -}}    \n        {{ $.Scratch.Set \"thumbnail\" (. | absURL) -}}\n    {{ else -}}\n        {{ $images := $.Resources.ByType \"image\" -}}\n        {{ $featured := $images.GetMatch \"*feature*\" -}}\n        {{ if not $featured -}}\n            {{ $featured = $images.GetMatch \"{*cover*,*thumbnail*}\" -}}\n        {{ end -}}\n        {{ with $featured -}}\n            {{ $.Scratch.Set \"thumbnail\" $featured.Permalink -}}\n        {{ else -}}\n            {{ with $.Site.Params.opengraph.images -}}\n                {{ $.Scratch.Set \"thumbnail\" (index . 0 | absURL) -}}\n            {{ end -}}\n        {{ end -}}\n    {{ end -}}\n{{ end -}}\n\n\n{{ if eq .Kind \"404\" -}}\n    <meta name=\"robots\" content=\"noindex, follow\">\n{{ else }}\n  {{ with or .Params.robots .Params.meta.robots .Site.Params.meta.robots -}}\n    <meta name=\"robots\" content=\"{{ . }}\">\n  {{ else -}}\n    <meta name=\"robots\" content=\"index, follow\">\n    <meta name=\"googlebot\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\">\n    <meta name=\"bingbot\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\">\n  {{ end -}}\n{{ end -}}\n\n    {{ if .IsHome -}}\n        <title>{{ .Site.Title }} {{ if .Site.Params.head.tagline }} {{ .Site.Params.main.separator }} {{ .Site.Params.head.tagline }}{{ end }}</title>\n    {{ else -}}\n        <title>{{ .Title }} {{ .Site.Params.main.separator }} {{ .Site.Title }} </title>\n    {{ end -}}\n\n    <meta name=\"description\" content=\"{{ $.Scratch.Get \"description\" }}\">\n{{ partial \"head/opengraph.html\" . }}\n{{ partial \"head/twitter_cards.html\" . }}\n\n{{ range .AlternativeOutputFormats }}\n    {{ printf \"<link rel=%q type=%q href=%q>\" .Rel .MediaType.Type .Permalink | safeHTML }}\n{{ end }}\n\n{{ partial \"head/structured-data.html\" . }}"
  },
  {
    "path": "layouts/_partials/head/structured-data.html",
    "content": "{{/* Copied from doks */}}\n{{ $baseURL := \"/\" | absURL -}}\n\n{{ $dot := . -}}\n{{ $dot.Scratch.Set \"path\" \"\" -}}\n{{ $dot.Scratch.Set \"breadcrumb\" slice -}}\n\n{{ $url := replace .Permalink ( printf \"%s\" .Site.BaseURL) \"\" -}}\n{{ $.Scratch.Add \"path\" .Site.BaseURL -}}\n\n{{ $.Scratch.Add \"breadcrumb\" (slice (dict \"url\" .Site.BaseURL \"name\" \"home\" \"position\" 1 )) -}}\n  {{ range $index, $element := split $url \"/\" -}}\n    {{ $dot.Scratch.Add \"path\" $element -}}\n    {{ $.Scratch.Add \"path\" \"/\" -}}\n    {{ if ne $element \"\" -}}\n    {{ $.Scratch.Add \"breadcrumb\" (slice (dict \"url\" ($.Scratch.Get \"path\") \"name\" . \"position\" (add $index 2))) -}}\n  {{ end -}}\n{{ end -}}\n\n{{ $alt := slice .Site.Params.schema.twitter .Site.Params.schema.linkedin .Site.Params.schema.github }}\n\n<script type=\"application/ld+json\">\n{\n  \"@context\": \"https://schema.org\",\n  \"@graph\": [\n    {\n      {{ if eq .Site.Params.schema.type \"Organization\" -}}\n        \"@type\": \"Organization\",\n        \"@id\": {{ print $baseURL \"#/schema/organization/1\" }},\n      {{ else -}}\n        \"@type\": \"Person\",\n        \"@id\": {{ print $baseURL \"#/schema/person/1\" }},\n      {{ end -}}\n      \"name\": \"{{ .Site.Params.schema.name }}\",\n      \"url\": {{ print $baseURL }},\n      \"sameAs\": {{ $alt | uniq | complement (slice \"\") }},\n      {{ if eq .Site.Params.schema.type \"Organization\" -}}\n        \"logo\": {\n          \"@type\": \"ImageObject\",\n          \"@id\": {{ print $baseURL \"#/schema/image/1\"}},\n          \"url\": {{ print $baseURL .Site.Params.schema.logo.url }},\n          \"width\": {{- .Site.Params.schema.logo.width -}},\n          \"height\": {{- .Site.Params.schema.logo.height -}},\n          \"caption\": \"{{- .Site.Params.schema.name -}}\"\n        },\n        \"image\": {\n          \"@id\": {{ print $baseURL \"#/schema/image/1\" }}\n        }\n      {{ else -}}\n        \"image\": {\n          \"@type\": \"ImageObject\",\n          \"@id\": {{ print $baseURL \"#/schema/image/1\"}},\n          \"url\": {{ print $baseURL .Site.Params.schema.image.url }},\n          \"width\": {{- .Site.Params.schema.image.width -}},\n          \"height\": {{- .Site.Params.schema.image.height -}},\n          \"caption\": \"{{- .Site.Params.schema.name -}}\"\n        }\n      {{ end -}}\n    },\n    {\n      \"@type\": \"WebSite\",\n      \"@id\": {{ print $baseURL \"#/schema/website/1\" }},\n      \"url\": {{ print $baseURL }},\n      \"name\": \"{{ .Site.Title }}\",\n      \"description\": \"{{ .Site.Params.main.description }}\",\n      {{ if eq .Site.Params.schema.type \"Organization\" -}}\n        \"publisher\": {\n          \"@id\": {{ print $baseURL \"#/schema/organization/1\" }}\n        }\n      {{ else -}}\n        \"publisher\": {\n          \"@id\": {{ print $baseURL \"#/schema/person/1\" }}\n        }\n      {{ end -}}\n    },\n    {\n      {{ if and (ne .Kind \"taxonomy\") (ne .Kind \"term\") -}}\n        \"@type\": \"WebPage\",\n      {{ else -}}\n        \"@type\": \"CollectionPage\",\n      {{ end -}}\n      \"@id\": {{ .Permalink }},\n      \"url\": {{ .Permalink }},\n      \"name\": \"{{ .Title }}\",\n      \"description\": \"{{ .Description }}\",\n      \"isPartOf\": {\n        \"@id\": {{ print $baseURL \"#/schema/website/1\" }}\n      },\n      {{ if eq .Site.Params.schema.type \"Organization\" -}}\n        \"about\": {\n          \"@id\": {{ print $baseURL \"#/schema/organization/1\" }}\n        },\n      {{ else -}}\n        \"about\": {\n          \"@id\": {{ print $baseURL \"#/schema/person/1\" }}\n        },\n      {{ end -}}\n      {{ with .Date }}\"datePublished\": \"{{ .Format \"2006-01-02T15:04:05CET\" }}\",{{ end -}}\n      {{ with .Lastmod }}\"dateModified\": \"{{ .Format \"2006-01-02T15:04:05CET\" }}\",{{ end -}}\n      \"breadcrumb\": {\n        \"@id\": {{ print .Permalink \"#/schema/breadcrumb/1\" }}\n      },\n      \"primaryImageOfPage\": {\n        \"@id\": {{ print .Permalink \"#/schema/image/2\" }}\n      },\n      \"inLanguage\": \"{{ .Site.Params.schema.locale }}\",\n      \"potentialAction\": [{\n        \"@type\": \"ReadAction\", \"target\": [{{ .Permalink }}]\n      }]\n    },\n    {\n      \"@type\": \"BreadcrumbList\",\n      \"@id\": {{ print .Permalink \"#/schema/breadcrumb/1\" }},\n      \"name\": \"Breadcrumbs\",\n      \"itemListElement\": [{{ $list := $.Scratch.Get \"breadcrumb\" }}{{ $len := (len $list) }}{{ range $index, $element := $list }}{{ if ne .position 1 }},{{ end }}{\n        \"@type\": \"ListItem\",\n        \"position\": {{ .position }},\n        \"item\": {\n          {{ if ne (add $index 1) $len -}}\n          \"@type\": \"WebPage\",\n          \"@id\": {{ .url }},\n          \"url\": {{ .url }},\n          \"name\": \"{{ .name | humanize | title }}\"\n          {{ else -}}\n          \"@id\": {{ .url }}\n          {{ end -}}\n        }\n        }{{ end }}]\n    },\n\n    {{ if and (eq .Kind \"page\") (or (eq .Section \"blog\") (eq .Section \"docs\") (eq .Section \"tutorial\") (eq .Section \"showcase\")) -}}\n    {\n      \"@context\": \"https://schema.org\",\n      \"@graph\": [\n        {\n          \"@type\": \"Article\",\n          \"@id\": {{ print $baseURL \"#/schema/article/1\" }},\n          \"headline\": \"{{ .Title }}\",\n          \"description\": \"{{ .Description }}\",\n          \"isPartOf\": {\n            \"@id\": {{ .Permalink }}\n          },\n          \"mainEntityOfPage\": {\n            \"@id\": {{ .Permalink }}\n          },\n          {{ with .Date }}\"datePublished\": \"{{ .Format \"2006-01-02T15:04:05CET\" }}\",{{ end -}}\n          {{ with .Lastmod }}\"dateModified\": \"{{ .Format \"2006-01-02T15:04:05CET\" }}\",{{ end -}}\n          \"author\": {\n            \"@id\": {{ print $baseURL \"#/schema/person/2\" }}\n          },\n          {{ if eq .Site.Params.schema.type \"Organization\" -}}\n            \"publisher\": {\n              \"@id\": {{ print $baseURL \"#/schema/organization/1\" }}\n            },\n          {{ else -}}\n            \"publisher\": {\n              \"@id\": {{ print $baseURL \"#/schema/person/1\" }}\n            },\n          {{ end -}}\n          \"image\": {\n            \"@id\": {{ print .Permalink \"#/schema/image/2\" }}\n          }\n        }\n      ]\n    },\n    {\n      \"@context\": \"https://schema.org\",\n      \"@graph\": [\n        {\n          \"@type\": \"Person\",\n          \"@id\": {{ print $baseURL \"#/schema/person/2\" }},\n          \"name\": {{ .Site.Params.schema.author.name }},\n          \"sameAs\": [\n            {{ with .Site.Params.schema.author.twitter -}}\n            {{ . }}\n            {{ end -}}\n            {{ with .Site.Params.schema.author.linkedin -}}\n            , {{ . }}\n            {{ end -}}\n            {{ with .Site.Params.schema.author.github -}}\n            , {{ . }}\n            {{ end -}}\n          ]\n        }\n      ]\n    },\n    {{ end -}}\n    {\n      \"@context\": \"https://schema.org\",\n      \"@graph\": [\n        {\n          \"@type\": \"ImageObject\",\n          \"@id\": {{ print .Permalink \"#/schema/image/2\" }},\n          \"url\": {{ $.Scratch.Get \"thumbnail\" }},\n          \"contentUrl\": {{ $.Scratch.Get \"thumbnail\" }},\n          \"caption\": \"{{ $.Scratch.Get \"title\" }}\"\n        }\n      ]\n    }\n\n  ]\n}\n</script>\n"
  },
  {
    "path": "layouts/_partials/head/stylesheet-core.html",
    "content": "{{/* Wrapper for the stylesheet partial with default arguments. */}}\n{{/* Added to avoid interference with the argument of partialCached. */}}\n{{ partial \"head/stylesheet.html\" -}}"
  },
  {
    "path": "layouts/_partials/head/stylesheet.html",
    "content": "{{- $error := false -}}\n{{- $transpiler := site.Params.main.build.transpiler | default \"libsass\" -}}\n{{- $silence := slice -}}\n{{- $supportedTranspilers := slice \"libsass\" \"dartsass\" -}}\n{{- if not (in $supportedTranspilers $transpiler) -}}\n    {{- errorf \"partial [head/stylesheet.html] - Invalid value for param 'transpiler': %s\" $transpiler -}}\n    {{ $error = true }}\n{{- end -}}\n{{- if site.Params.main.build.silenceDeprecations -}}\n    {{- $silence = (slice \"import\" \"color-functions\" \"global-builtin\" \"if-function\" \"legacy-js-api\") -}}\n{{- end -}}\n\n{{- $absoluteURL := site.Params.main.canonifyAssetsURLs | default false -}}\n{{- $source := .source }}\n{{- if not $source -}}\n    {{- if eq $transpiler \"dartsass\" }}{{ $source = \"scss/app-dart.scss\" }}{{ else }}{{ $source = \"scss/app.scss\" }}{{ end -}}\n{{- end -}}\n{{- $target := .target | default \"css/main.css\" -}}\n{{- $page := .page -}}\n{{- $core := .core | default true -}}\n\n{{- $modules := \"\" -}}\n{{ $config := page.Scratch.Get \"modules\" }}\n{{ if not $config }}\n    {{ errorf \"partial [head/stylesheet.html] - Cannot initialize module configuration\" }}\n    {{ $error = true }}\n{{ end }}\n\n{{ if $core }}\n    {{- if reflect.IsSlice $config.excludeSCSS -}}\n        {{- $modules = complement $config.excludeSCSS (append $config.core $config.critical) -}}\n    {{ else }}\n        {{- $modules = append $config.core $config.critical -}}\n    {{ end }}\n{{- end -}}\n\n{{ if and site.Params.style.darkModeTint (not (findRE `\\d+%` site.Params.style.darkModeTint)) }}\n    {{- errorf \"partial [head/stylesheet.html] - Invalid value for site param 'style.darkModeTint': %s\" site.Params.style.darkModeTint -}}\n    {{ $error = true }}\n{{ end}}\n\n{{- $navbarOffset := \"0rem\" -}}\n{{- $navbarOffsetXS := \"0rem\" -}}\n{{- if site.Params.navigation.fixed }}\n    {{ $navbarOffset = site.Params.navigation.offset | default \"4rem\" }}\n    {{ $navbarOffsetXS = site.Params.navigation.offsetXS | default $navbarOffset }}\n{{ end }}\n{{- $overlayOffset := $navbarOffset -}}\n{{- if site.Params.navigation.overlay }}{{ $overlayOffset = \"0rem\" }}{{ end }}\n{{- $vars := dict \n    \"base-url\"                (page.Scratch.Get \"baseURL\" | default \"/\")\n    \"theme-font\"              (default \"Inter\" site.Params.style.themeFont)\n    \"font-size-base\"          (default \"1rem\" site.Params.style.fontSizeBase)\n    \"primary\"                 (default \"#007bff\" site.Params.style.primary)\n    \"secondary\"               (default \"#6c757d\" site.Params.style.secondary)\n    \"success\"                 (default \"#198754\" site.Params.style.success)\n    \"info\"                    (default \"#0dcaf0\" site.Params.style.info)\n    \"warning\"                 (default \"#ffc107\" site.Params.style.warning)\n    \"danger\"                  (default \"#dc3545\" site.Params.style.danger)\n    \"light\"                   (default \"#f8f9fa\" site.Params.style.light)\n    \"dark\"                    (default \"#212529\" site.Params.style.dark)\n    \"navbar-height\"           (site.Params.navigation.offset | default \"4rem\")\n    \"navbar-offset\"           $navbarOffset\n    \"navbar-offset-xs\"        $navbarOffsetXS\n    \"navbar-size\"             (site.Params.navigation.size | default \"md\")\n    \"overlay-offset\"          $overlayOffset\n    \"enable-dark-mode\"        (printf \"%t\" ((default true (or site.Params.main.enableDarkMode site.Params.main.colorMode.enabled))))\n    \"import-fonts\"            (printf \"%t\" (not (hasPrefix (lower site.Params.style.themeFontPath) \"http\")))\n    \"dark-mode-shade\"         (default \"0%\" site.Params.style.darkModeShade)\n    \"dark-mode-tint\"          (default \"0%\" site.Params.style.darkModeTint)\n    \"padding-x\"               (default 4 site.Params.main.padding.x)\n    \"padding-y\"               (default 4 site.Params.main.padding.y)\n-}}\n\n{{- $options := (dict\n    \"transpiler\"          $transpiler\n    \"silenceDeprecations\" $silence\n    \"targetPath\"          $target\n    \"enableSourceMap\"     (not hugo.IsProduction)\n    \"vars\"                $vars\n) -}}\n{{- $bundle := partialCached \"utilities/bundlev2.html\" (dict\n    \"page\"      page\n    \"match\"     $source\n    \"filename\"  (printf \"scss/bundle-%s.scss\" (hash.XxHash $source))\n    \"modules\"   $modules\n    \"basepath\"  \"scss\"\n    \"debugging\" site.Params.debugging.showSCSS\n) $source page.Language.Lang (delimit $modules \",\") -}}\n\n{{- if and (gt ($bundle.bundle.Content | len) 0) (not $error) }}\n    {{- $css := $bundle.bundle | resources.ExecuteAsTemplate $target . | toCSS $options -}}\n\n    {{ if $core }}\n        {{- partialCached \"head/icons.html\" (dict \"css\" $css) ($css.Content | md5) -}}\n    {{ end }}\n    {{- if site.Params.style.purge -}}\n        {{- $post_options := dict \"config\" \"config\" \"noMap\" hugo.IsProduction -}}\n        {{- $css = $css | css.PostCSS $post_options -}}\n    {{- end -}}\n\n    {{- if not hugo.IsProduction -}}\n        <link rel=\"stylesheet\" href=\"{{ if $absoluteURL }}{{ $css.Permalink }}{{ else }}{{ $css.RelPermalink }}{{ end }}\">\n    {{- else -}}\n        {{- $css = $css | minify | fingerprint | resources.PostProcess -}}\n        <link rel=\"stylesheet\" href=\"{{ if $absoluteURL }}{{ $css.Permalink }}{{ else }}{{ $css.RelPermalink }}{{ end }}\" integrity=\"{{ $css.Data.Integrity }}\" crossorigin=\"anonymous\">\n    {{- end -}}\n{{- end -}}"
  },
  {
    "path": "layouts/_partials/head/twitter_cards.html",
    "content": "{{/* Copied from doks */}}\n<meta name=\"twitter:card\" content=\"summary_large_image\">\n{{ with .Site.Params.twitterSite }}<meta name=\"twitter:site\" content=\"{{ . }}\">{{ end }}\n{{ with .Site.Params.twitterCreator }}<meta name=\"twitter:creator\" content=\"{{ . }}\">{{ end }}\n<meta name=\"twitter:title\" content=\"{{ $.Scratch.Get \"title\" }}\">\n<meta name=\"twitter:description\" content=\"{{ $.Scratch.Get \"description\" }}\">\n<meta name=\"twitter:image\" content=\"{{ $.Scratch.Get \"thumbnail\" }}\">\n<meta name=\"twitter:image:alt\" content=\"{{ $.Scratch.Get \"title\" }}\">"
  },
  {
    "path": "layouts/_partials/page/articles.html",
    "content": "{{/* Add default hero and articles for list pages */}}\n{{- $padding := partial \"utilities/GetPadding.html\" -}}\n\n{{/* Render basic header for list page */}}\n{{ if .Site.Params.navigation.breadcrumb }}\n    {{ partial \"assets/breadcrumb.html\" (dict \"page\" .) }}\n{{ end }}\n{{ partial \"assets/section-title.html\" (dict\n    \"heading\" (dict\n        \"title\"   .Title\n        \"content\" .Description\n        \"align\"   \"start\"\n    )\n    \"use-title\" true\n) }}\n\n{{/* Init the card styling */}}\n{{ $articlesParams := $.Scratch.Get \"articlesParams\" }}\n{{ $sort := \"date\" }}\n{{ $reverse := true }}\n{{ $class := \"border-0 h-100\" }}\n{{ $cardPadding := 0 }}\n{{ $headerStyle := \"full\" }}\n{{ $bodyStyle := \"full\" }}\n{{ $footerStyle := \"none\" }}\n{{ $iconStyle := \"\" }}\n{{ if reflect.IsMap $articlesParams }}\n    {{ with index $articlesParams \"sort\" }}{{ $sort = . }}{{ end }}\n    {{ if isset $articlesParams \"reverse\" }}{{ $reverse = index $articlesParams \"reverse\" }}{{ end }}\n    {{ with index $articlesParams \"class\" }}{{ $class = . }}{{ end }}\n    {{ with index $articlesParams \"padding\" }}{{ $cardPadding = . }}{{ end }}\n    {{ with index $articlesParams \"header-style\" }}{{ $headerStyle = . }}{{ end }}\n    {{ with index $articlesParams \"body-style\" }}{{ $bodyStyle = . }}{{ end }}\n    {{ with index $articlesParams \"footer-style\" }}{{ $footerStyle = . }}{{ end }}\n    {{ with index $articlesParams \"icon-style\" }}{{ $iconStyle = . }}{{ end }}\n{{ end }}\n\n{{/* Render paginated list of articles */}}\n{{ $result := partial \"assets/live-pages.html\" (dict \"page\" . \"sort\" $sort \"reverse\" $reverse) }}\n{{ $pages := $result.pages }}\n{{ if gt (len $pages) 0 }}\n    <div class=\"container-fluid px-0 py-{{ $padding.y }} width-100\">\n        <div class=\"row row-cols-1 row-cols-md-2 row-cols-lg-3 g-4\">\n            {{ if site.Params.env_bookshop_live }}\n                {{ range $pages }}\n                    <div class=\"col\">\n                        {{ partial \"assets/card.html\" (dict\n                            \"title\"        .Title\n                            \"thumbnail\"    .Thumbnail\n                            \"description\"  .Description\n                            \"class\"        $class\n                            \"padding\"      $cardPadding\n                            \"header-style\" $headerStyle\n                            \"body-style\"   $bodyStyle\n                            \"footer-style\" $footerStyle\n                            \"icon-style\"   $iconStyle\n                        ) }}\n                    </div>\n                {{ end }}\n            {{ else }}\n                {{ range (.Paginate $pages).Pages }}\n                    <div class=\"col\">\n                        {{ partial \"assets/card.html\" (dict\n                            \"path\"         .RelPermalink\n                            \"class\"        $class\n                            \"padding\"      $cardPadding\n                            \"header-style\" $headerStyle\n                            \"body-style\"   $bodyStyle\n                            \"footer-style\" $footerStyle\n                            \"icon-style\"   $iconStyle\n                        ) }}\n                    </div>\n                {{ end }}\n            {{ end }}\n        </div>\n\n        {{ if not site.Params.env_bookshop_live }}\n            <div class=\"pt-{{ $padding.y }}\">{{ partial \"assets/pagination.html\" (dict \"page\" .) }}</div>\n        {{ end }}\n    </div>\n{{ end }}"
  },
  {
    "path": "layouts/_partials/page/blocks.html",
    "content": "<!-- This is a placeholder, the actual code is implemented by gethinode/mod-blocks -->\n<!-- Hinode sites without mod-blocks simply ignore .Params.content_blocks -->"
  },
  {
    "path": "layouts/_partials/page/metadata.html",
    "content": "{{- $metadata := .Scratch.Get \"metadata\" -}}\n{{ if ne $metadata \"none\" }}\n    <small class=\"text-body-secondary text-uppercase\">\n        {{- $readingTime := (index site.Params.pages \"readingTime\") | default true -}}\n        {{- $wordCount := (index site.Params.pages \"wordCount\") | default true -}}\n        \n        {{ if .Date }}\n            {{ $lastmodstr := (partial \"utilities/date.html\" (dict \"date\" .Lastmod \"format\" \"long\")) -}}\n            {{ $datestr := (partial \"utilities/date.html\" (dict \"date\" .Date \"format\" \"long\")) -}}\n            {{ if gt .Lastmod .Date }}\n                {{ $lastmodstr | i18n \"lastModified\" }}\n            {{ else }}\n                {{ $datestr | i18n \"postedOnDate\" -}}\n            {{ end }}\n            {{ if or $readingTime $wordCount }}&bull;{{ end }}\n        {{ end }}\n\n        {{- if $readingTime }}\n            {{ (math.Max .ReadingTime 1) | lang.FormatNumber 0 }}&nbsp;{{ i18n \"minutesShort\" }} {{ i18n \"read\" }}\n            {{ if $wordCount }}&bull;{{ end }}\n        {{ end }}\n        \n        {{- if $wordCount }}{{ .WordCount | lang.FormatNumber 0 }}&nbsp;{{ i18n \"words\" }}{{ end }}\n    </small>\n{{ end }}\n"
  },
  {
    "path": "layouts/_partials/page/navbar-extra.html",
    "content": "{{- /* Default empty slot — override in your site to inject content into the navbar collapse section. */ -}}\n"
  },
  {
    "path": "layouts/_partials/page/navigation.html",
    "content": "{{/* Render previous / next navigation */}}\n{{- $pageNavPrev := partial \"utilities/GetThemeIcon.html\" (dict \"id\" \"pageNavPrev\" \"default\" \"fas arrow-left\") -}}\n{{- $pageNavNext := partial \"utilities/GetThemeIcon.html\" (dict \"id\" \"pageNavNext\" \"default\" \"fas arrow-right\") -}}\n\n{{/* Read the section's configuration to get the reverse setting */}}\n{{- $sectionPage := .CurrentSection -}}\n{{- $reverseParam := false -}}\n{{- with $sectionPage -}}\n    {{- range .Params.content_blocks -}}\n        {{- if eq ._bookshop_name \"articles\" -}}\n            {{- with .input.reverse -}}\n                {{- $reverseParam = . -}}\n            {{- end -}}\n        {{- end -}}\n    {{- end -}}\n{{- end -}}\n\n{{- $result := partial \"assets/live-pages.html\" (dict \"section\" .CurrentSection.Section \"sort\" \"title\" \"reverse\" $reverseParam) -}}\n{{- $pages := $result.pages -}}\n\n{{/* Hugo's .Prev/.Next have inverted semantics - they always need to be swapped */}}\n{{/* Regardless of sort direction, .Next goes to earlier page, .Prev goes to later page */}}\n{{- $prevPage := \"\" -}}\n{{- $nextPage := \"\" -}}\n{{ if eq (printf \"%T\" $pages) \"page.Pages\" }}\n    {{- $prevPage = $pages.Next . -}}\n    {{- $nextPage = $pages.Prev . -}}\n{{ end }}\n\n<div class=\"row row-cols-2 mt-5 mb-3\">\n    <div class=\"col\">\n        {{- with $prevPage -}}\n            {{- if .OutputFormats.Get \"html\" -}}\n                <a class=\"next\" href=\"{{ .RelPermalink }}\">\n                    {{- partial \"assets/icon.html\" (dict \"icon\" $pageNavPrev \"spacing\" false) }}&nbsp;{{ .LinkTitle }}\n                </a>\n            {{- end -}}\n        {{- end -}}\n    </div>\n    <div class=\"col text-end\">\n        {{- with $nextPage -}}\n            {{- if .OutputFormats.Get \"html\" -}}\n                <a class=\"previous\" href=\"{{ .RelPermalink }}\">\n                    {{ .LinkTitle }}&nbsp;{{- partial \"assets/icon.html\" (dict \"icon\" $pageNavNext \"spacing\" false) }}\n                </a>\n            {{- end -}}\n        {{- end -}}\n    </div>\n</div>\n"
  },
  {
    "path": "layouts/_partials/page/sharing.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{/* Initialize global arguments */}}\n{{- $sharing := $.Scratch.Get \"sharing\" -}}\n\n{{/* Main code */}}\n{{- if $sharing -}}\n    {{- $order := \"asc\" -}}\n    {{- $list := .Site.Params.sharing.providers -}}\n    {{- if .Site.Params.sharing.reverse }}{{ $order = \"desc\" }}{{ else }}{{ $order = \"asc\" }}{{ end -}}\n    {{- $sort := .Site.Params.sharing.sort | default \"weight\" -}}\n    {{- $list = sort $list $sort $order -}}\n\n    {{- $download := partial \"utilities/GetTargetPath.html\" (dict \"path\" .Params.download  \"page\" .) -}}\n    {{- if and $download (not (fileExists (path.Join \"static\" $download))) -}}\n        {{- errorf \"Cannot find download file for page '%s': %s\" .File.Path $download -}}\n    {{- end -}}\n    \n    <span class=\"hstack gap-2 text-body-secondary\">\n        {{- range $index, $item := $list -}}\n            {{- $url := $item.url -}}\n            {{- $url = replace $url \"{url}\" $.Permalink -}}\n            {{- $url = replace $url \"{title}\" (urlquery $.Title) -}}\n            {{- $url = $url | safeURL -}}\n            {{- $target := \"\" -}}\n            {{- $clipboard := \"\" -}}\n            {{- if .clipboard -}}\n                {{- $target = (printf \"toast-message-%s-%d\" (anchorize $item.name) $index ) -}}\n                {{- $clipboard = $url -}}\n                {{- $url = \"\" -}}\n                {{- partial \"assets/toast.html\" (dict \"id\" $target \"message\" (printf \"%s %s\" (T \"link\") (T \"copiedToClipboard\"))) -}}\n            {{- end -}}\n            {{ partial \"assets/button.html\" (dict \n                \"toast-id\"   $target\n                \"clipboard\"  $clipboard\n                \"href\"       $url\n                \"icon\"       $item.icon\n                \"icon-class\" \"fa-fw\"\n                \"class\"      \"btn-social p-0\"\n                \"label\"      (T \"shareLink\" $item.name)\n                \"spacing\"    false\n            ) }}\n        {{- end -}}\n        {{ if .Site.Params.sharing.webshare }}\n            {{ $attr := dict \"data-sharing-title\" .Title \"data-sharing-description\" .Description \"data-sharing-url\" .Permalink }}\n            {{- with index site.Params.sharing \"webshare-icon\" -}}\n                {{- partial \"utilities/LogWarn.html\" (dict\n                    \"partial\" \"page/sharing.html\"\n                    \"warnid\"  \"warn-deprecated-icons\"\n                    \"msg\"     \"Deprecated icon params detected; migrate to the [icons] section in params.toml\"\n                    \"details\" (slice \"Replace 'sharing.webshare-icon' with 'icons.sharingWebshare'\")\n                ) -}}\n            {{- end -}}\n            {{- $icon := partial \"utilities/GetThemeIcon.html\" (dict \"id\" \"sharingWebshare\" \"alias\" (index site.Params.sharing \"webshare-icon\") \"default\" \"fas share-nodes\") -}}\n            {{ partial \"assets/button.html\" (dict\n                \"href\"       \"\"\n                \"icon\"       $icon\n                \"icon-class\" \"fa-fw\"\n                \"class\"      \"btn-social p-0\"\n                \"attributes\" $attr\n                \"label\"      (T \"shareLink\" (T \"shareSystem\"))\n                \"spacing\"    false\n            ) }}\n        {{- end -}}\n        {{ with $download }}\n            {{ $label := (T \"download\" ) }}\n            {{ $lang := strings.TrimPrefix \".\" (path.Ext (path.BaseName .)) }}\n            {{ if and $lang (ne site.Language.Lang $lang) }}\n                {{ range site.Languages }}\n                    {{ if eq .LanguageCode $lang }}\n                        {{ $label = printf \"%s (%s)\" (T \"download\") (T (printf \"lang_%s\" .LanguageCode)) }}\n                    {{ end }}\n                {{ end }}\n            {{ end }}\n            {{ $attr := dict \"download\" (path.Base .) }}\n            {{- $downloadIcon := partial \"utilities/GetThemeIcon.html\" (dict \"id\" \"downloadIcon\" \"default\" \"fas download\") -}}\n            {{ partial \"assets/button.html\" (dict\n                \"href\"       .\n                \"icon\"       $downloadIcon\n                \"icon-class\" \"fa-fw\"\n                \"label\"      $label\n                \"class\"      \"btn-social p-0\"\n                \"attributes\" $attr\n                \"spacing\"    false\n            ) }}\n        {{- end -}}\n    </span>\n{{- end -}}"
  },
  {
    "path": "layouts/_partials/page/sidebar-offcanvas.html",
    "content": "{{- $section := .section -}}\n{{- $raw := .raw -}}\n{{ with $raw }}\n    <div class=\"offcanvas offcanvas-start\" tabindex=\"-1\" id=\"offcanvas-sidebar\" aria-labelledby=\"offcanvas-label\">\n        <div class=\"offcanvas-header\">\n            <h5 class=\"offcanvas-title\" id=\"offcanvas-label\">{{ strings.FirstUpper $section }}</h5>\n            <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"offcanvas\" aria-label=\"{{ T \"close\" }}\"></button>\n        </div>\n        <div class=\"offcanvas-body\">\n            {{ . | safeHTML }}\n        </div>\n    </div>\n{{ end }}"
  },
  {
    "path": "layouts/_partials/page/sidebar.html",
    "content": "{{- $menu := .Scratch.Get \"sidebar\" -}}\n{{- $version := .Scratch.Get \"version\" -}}\n{{ if $menu }}\n    {{ partial \"assets/sidebar.html\" (dict \"page\" . \"menu\" $menu \"version\" $version) }}\n{{ end -}}\n"
  },
  {
    "path": "layouts/_partials/page/tags.html",
    "content": "{{- if gt (len (.GetTerms \"tags\")) 0 -}}\n    <div class=\"mt-3\">\n        <div class=\"d-none-dark\">\n            <div class=\"hstack gap-1\">\n                {{ range (.GetTerms \"tags\") -}}\n                    {{- $url := .Page.RelPermalink -}}\n                    {{ partial \"assets/button.html\" (dict \"href\" $url \"title\" .LinkTitle \"color\" \"light\" \"button-size\" \"sm\") }}\n                {{ end -}}\n            </div>\n        </div>\n        \n        <div class=\"d-none-light\">\n            <div class=\"hstack gap-1\">\n                {{ range (.GetTerms \"tags\") -}}\n                    {{- $url := .Page.RelPermalink -}}\n                    {{ partial \"assets/button.html\" (dict \"href\" $url \"title\" .LinkTitle \"color\" \"primary\" \"button-size\" \"sm\" \"outline\" \"true\") }}\n                {{ end -}}\n            </div>\n        </div>\n    </div>\n{{- end -}}\n"
  },
  {
    "path": "layouts/_partials/page/taxonomy-list.html",
    "content": "<table class=\"mt-5 w-100\">\n    <tbody>\n    {{ range $.Site.Taxonomies.tags.ByCount }}\n        {{- $title := .Page.Title }}\n        {{ if and site.Params.main.titleCase (not $.Page.Params.exact) }}{{ $title = title $title }}{{ end }}\n        <tr>\n            <td class=\"text-nowrap pe-3 align-bottom\">\n                {{ .Count }} {{ if gt .Count 1 }} {{ T \"articles\" }} {{ else }} {{ T \"article\" }} {{ end }}\n            </td>\n            <td class=\"w-100\">\n                <a href=\"{{ .Page.RelPermalink }}\">{{ $title | .Page.RenderString }}</a>\n            </td>\n        </tr>\n    {{ end }}\n    </tbody>\n</table>\n{{ if eq $.Site.Taxonomies.tags 0 }}\n    <p class=\"pt-4\">{{- T \"emptyTags\" }}.</p>\n{{ end }}\n"
  },
  {
    "path": "layouts/_partials/page/taxonomy-tag.html",
    "content": "{{- $breakpoint := $.Scratch.Get \"breakpoint\" -}}\n{{ $dateFormat := default \"Jan 2\" (index .Site.Params \"date_format\") }}\n{{ $.Scratch.Set \"lastYear\" \"\"}}\n\n{{ range .Pages.ByDate.Reverse }}\n    {{ $year := .Date.Year }}\n    {{ $lastYear := $.Scratch.Get \"lastYear\"}}\n    {{- $title := .Title }}\n    {{ if and site.Params.main.titleCase (not $.Page.Params.exact) }}{{ $title = title $title }}{{ end }}\n    <div class=\"row mt-2\">\n        <div class=\"d-none d-{{ $breakpoint.prev }}-block col-{{ $breakpoint.prev }}-3 mt-auto text-right\">\n            {{ with .Date }}\n                <time class=\"post-date\" datetime=\"{{ .Format \"2006-01-02T15:04:05Z07:00\" | safeHTML }}\">\n                    {{ (partial \"utilities/date.html\" (dict \"date\" . \"format\" \"medium\")) }}\n                </time>\n            {{ else }}\n            -\n            {{ end }}\n        </div>\n        <div class=\"col\">\n            {{ if ne $year $lastYear }}\n                <p class=\"text-body-secondary mt-5\">{{ $year }}</p>\n                {{ $.Scratch.Set \"lastYear\" $year }}\n            {{ end }}\n            <a href=\"{{ .Page.RelPermalink }}\">{{ if .Draft }}{{ T \"draft\" | upper }}: {{ end }}{{ $title | .Page.RenderString }}</a>\n        </div>\n    </div>\n{{ end }}\n"
  },
  {
    "path": "layouts/_partials/page/thumbnail.html",
    "content": "{{- $page := .page -}}\n{{- $wrapper := printf \"img-wrap\" -}}\n{{- with .wrapper }}{{ $wrapper = printf \"img-wrap %s\" . }}{{ end -}}\n{{ $class := \"rounded\" }}\n{{ with .class }}{{ $class = . }}{{ end }}\n{{- $ratio := .ratio | default (site.Params.thumbnails.ratio | default \"21x9\") -}}\n{{- $thumbnail := \"\" -}}\n{{- $anchor := \"\" -}}\n{{- $credits := \"\" -}}\n{{ $figclass := .figclass }}\n\n{{- if reflect.IsMap $page.Params.Thumbnail -}}\n    {{- $thumbnail = $page.Params.Thumbnail.url -}}\n    {{- $anchor = $page.Params.Thumbnail.anchor }}\n    {{- $author := \"\" -}}\n    {{- if and $page.Params.Thumbnail.authorURL \"text\" $page.Params.Thumbnail.author }}\n        {{- $author = partial \"assets/link.html\" (dict \"href\" $page.Params.Thumbnail.authorURL \"text\" $page.Params.Thumbnail.author \"page\" $page) -}}\n    {{- else if $page.Params.Thumbnail.author }}\n        {{- $author = $page.Params.Thumbnail.author -}}\n    {{- end -}}\n\n    {{- $origin := \"\" -}}\n    {{- if and $page.Params.Thumbnail.originURL \"text\" $page.Params.Thumbnail.origin }}\n        {{- $origin = partial \"assets/link.html\" (dict \"href\" $page.Params.Thumbnail.originURL \"text\" $page.Params.Thumbnail.origin \"page\" $page) -}}\n    {{- else if $page.Params.Thumbnail.origin }}\n        {{- $origin = $page.Params.Thumbnail.origin -}}\n    {{- end }}\n\n    {{- if and $author $origin }}\n        {{ $credits = printf (T \"photoFull\") $author $origin }}\n    {{ else if $author }}\n        {{ $credits = T \"photoShort\" $author }}\n    {{ end }}\n{{ else }}\n    {{- $thumbnail = $page.Params.Thumbnail -}}\n{{- end -}}\n\n{{ if $thumbnail -}}\n    {{- partial \"assets/image.html\" (dict \n        \"src\"      $thumbnail\n        \"anchor\"   $anchor\n        \"ratio\"    $ratio\n        \"wrapper\"  $wrapper\n        \"class\"    $class\n        \"title\"    $page.Params.title\n        \"caption\"  $credits\n        \"figclass\" $figclass\n        \"priority\" \"high\"\n    ) -}}\n{{ end -}}\n"
  },
  {
    "path": "layouts/_partials/templates/script.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{/* Initialize arguments */}}\n{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"script\" \"args\" .) -}}\n{{- if or $args.err $args.warnmsg -}}\n    {{- partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\" \"templates/script.html\" \n        \"warnid\"  \"warn-invalid-arguments\"\n        \"msg\"     \"Invalid arguments\"\n        \"details\" ($args.errmsg | append $args.warnmsg)\n        \"file\"    page.File\n    ) -}}\n{{- end -}}\n\n{{/* Initialize local arguments */}}\n{{- $category := cond (ne $args.category \"other\") $args.category \"\" -}}\n\n{{/* Main code */}}\n{{- if not $args.err -}}\n    <script src=\"{{ $args.link }}\"\n        {{/* with $args.scriptType generates an error when using type=\"{{ . }}\", possibly a Hugo bug */}}\n        {{- with $args.scriptType }}{{ printf ` type=\"%s\"` . | safeHTMLAttr }}{{ end -}}\n        {{- with $category }} data-category=\"{{ . }}\"{{ end -}}\n        {{- with $args.integrity }} integrity=\"{{ . }}\" crossorigin=\"anonymous\"{{ end }}\n        {{- with $args.state }} {{ . | safeHTMLAttr }}{{ end -}}></script>\n{{- end -}}"
  },
  {
    "path": "layouts/_partials/utilities/AddModule.html",
    "content": "{{ with .module }}\n\t{{- $dependencies := page.Scratch.Get \"dependencies\" -}}\n\t{{- if reflect.IsSlice $dependencies -}}\n\t\t{{- $dependencies = complement $dependencies (slice .) -}}\n\t{{ else }}\n\t\t{{- $dependencies = slice . -}}\n\t{{ end }}\n\t{{- page.Scratch.Set \"dependencies\" $dependencies -}}\n{{ end }}"
  },
  {
    "path": "layouts/_partials/utilities/GetBackgroundStyle.html",
    "content": "<!-- \n    Copyright © 2024 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n-->\n\n{{/* Initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"background\" \"args\" .) }}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\" \"utilities/GetBackgroundStyle.html\" \n        \"warnid\"  \"warn-invalid-arguments\"\n        \"msg\"     \"Invalid arguments\"\n        \"details\" ($args.errmsg | append $args.warnmsg)\n        \"file\"    page.File\n    )}}\n{{ end }}\n\n{{ $style := $args.class }}\n{{ if and (not $args.err) $args.background }}\n    {{ $background := \"\" }}\n    {{ $subtle := false }}\n    {{ if reflect.IsMap $args.background }}\n        {{ $background = $args.background.color }}\n        {{ $subtle = $args.background.subtle }}\n    {{ else }}\n        {{ $background = $args.background }}\n    {{ end }}\n\n    {{ if and $subtle (not (hasPrefix $background \"body\")) }}\n        {{- $style = printf \"%s bg-%s-subtle\" (or $style \"\") $background -}}\n    {{ else if $background }}\n        {{- $style = printf \"%s bg-%s\" (or $style \"\") $background -}}\n    {{ end }}\n{{ end }}\n\n{{ return (trim $style \" \") }}"
  },
  {
    "path": "layouts/_partials/utilities/GetIllustration.html",
    "content": "{{- $item := .item -}}\n{{- $illustration := \"\" -}}\n{{- $style := \"img-wrap mx-auto mx-md-0\" -}}\n{{- $size := .size | default \"col-12 col-sm-4 col-lg-12\" -}}\n\n{{ if $item.Params.icon }}\n    {{- $icon := (or (and (reflect.IsMap $item.Params.Icon) $item.Params.Icon.url) $item.Params.Icon) -}}\n    {{- $mode := and (reflect.IsMap $item.Params.Icon) $item.Params.Icon.mode -}}\n    {{ if eq (lower (path.Ext $icon)) \".json\" }}\n        {{ $illustration = partial \"assets/animation.html\" (dict \"data\" $icon \"mode\" $mode \"loop\" false \"hover\" true \"class\" (printf \"mx-auto text-center %s\" $size)) }}\n    {{ else }}\n        {{ $illustration = partial \"assets/icon.html\" (dict \"icon\" \"mode\" $mode $icon \"wrapper\" \"mx-auto text-center\")}}\n    {{ end }}\n{{ else }}\n    {{- $thumbnail := \"\" -}}\n    {{ if reflect.IsMap $item.Params.Thumbnail }}{{ $thumbnail = $item.Params.Thumbnail.url }}{{ else }}{{ $thumbnail = $item.Params.Thumbnail }}{{ end }}\n    {{- if $thumbnail }}\n        {{ $illustration = partial \"assets/image.html\" (dict\n            \"src\"     $thumbnail\n            \"ratio\"   \"16x9\"\n            \"wrapper\" $style\n            \"inner\"   \"rounded\"\n            \"title\"    $item.Site.Title\n        ) }}\n    {{ end }}\n{{ end }}\n\n{{ return $illustration }}"
  },
  {
    "path": "layouts/_partials/utilities/GetIncludeTOC.html",
    "content": "{{- $includeToc := false -}}\n{{- if .Site.Params.navigation.toc -}}\n    {{- $includeToc = true -}}\n    {{- if isset .Params \"includeToc\" -}}\n        {{- $includeToc = .Params.includeToc -}}\n    {{- else -}}\n        {{- with (index site.Params.pages .Type) -}}\n            {{- if isset . \"includetoc\" -}}\n                {{- $includeToc = index . \"includetoc\" -}}\n                {{- if ne (printf \"%T\" $includeToc) \"bool\" -}}\n                    {{- errorf \"Expected bool value in site parameters: pages.%s.includeToc\" $.Type -}}\n                {{- end -}}\n            {{- end -}}\n    {{- end -}}\n    {{- end -}}\n{{- end -}}\n\n{{- return $includeToc -}}"
  },
  {
    "path": "layouts/_partials/utilities/GetLink.html",
    "content": "<!-- \n    Copyright © 2024 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n-->\n\n{{ $error := false -}}\n{{ $msg := \"\" -}}\n\n{{/* Initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"link\" \"args\" . \"group\" \"partial\") }}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\" \"utilities/GetLink.html\" \n        \"warnid\"  \"warn-invalid-arguments\"\n        \"msg\"     \"Invalid arguments\"\n        \"details\" ($args.errmsg | append $args.warnmsg)\n        \"file\"    page.File\n    )}}\n    {{ $error = $args.err }}\n{{ end }}\n\n<!-- Initialize local arguments -->\n{{- $destination := strings.TrimPrefix (strings.TrimSuffix \"/\" site.BaseURL) $args.href -}}\n{{- $isExternal := or (ne (urls.Parse (absURL $destination)).Host (urls.Parse site.BaseURL).Host) $args.external -}}\n{{- $anchor := \"\" -}}\n\n<!-- Main code -->\n{{- if not $isExternal -}}\n    {{- if strings.Contains $destination \"#\" }}\n        {{ $segments := split $destination \"#\" }}\n        {{- if ne (len $segments) 2 }}\n            {{ $msg = printf \"Malformed path, expected one anchor '#' only: %s\" $destination}}\n            {{ $error = true }}\n        {{ else }}\n            {{- $destination = index $segments 0 -}}\n            {{- $anchor = index $segments 1 -}}\n        {{ end }}\n    {{ end }}\n\n    {{ if $destination }}\n        {{ $ref := partial \"utilities/GetPage.html\" (dict \"url\" $destination \"page\" $args.page) }}\n        {{- if not $ref -}}\n            {{- $msg = printf \"Cannot find page: %s\" $destination -}}\n            {{- $error = true -}}\n        {{- else -}}\n            {{- $destination = $ref.RelPermalink -}}\n            {{- with $anchor }}{{ $destination = printf \"%s#%s\" (strings.TrimSuffix \"/\" $destination) . -}}{{ end -}}\n        {{- end -}}\n    {{ else }}\n        {{ $destination = printf \"#%s\" $anchor }}\n    {{ end }}\n{{- end -}}\n\n{{ return (dict \"href\" $destination \"error\" $error \"msg\" $msg) }}\n"
  },
  {
    "path": "layouts/_partials/utilities/GetMetadata.html",
    "content": "{{- $metadata := \"full\" -}}\n{{ if isset .Params \"metadata\" }}\n    {{ $metadata = .Params.metadata }}\n{{ else }}\n    {{- with (index site.Params.pages .Type ) -}}\n        {{ if isset . \"metadata\" }}{{ $metadata = (index . \"metadata\") }}{{ end }}\n    {{- end -}}\n{{ end }}\n\n{{- $supportedStates := slice \"full\" \"original\" \"none\" -}}\n{{- if not (in $supportedStates $metadata) -}}\n    {{- errorf \"layout [_default/page/header.html] - Invalid value for param 'metadata': %s\" $metadata -}}\n{{- end -}}\n\n{{ return $metadata }}\n"
  },
  {
    "path": "layouts/_partials/utilities/GetSharing.html",
    "content": "{{- $sharing := false -}}\n\n{{- if .Site.Params.sharing.enabled -}}\n    {{- $sharing = true -}}\n    {{ if isset .Params \"sharing\" }}\n        {{ $sharing = .Params.sharing }}\n    {{ else }}\n        {{- with (index .Site.Params.pages .Type ) -}}\n            {{ if isset . \"sharing\" }}\n                {{ $sharing = (index . \"sharing\") }}\n            {{ end }}\n        {{- end -}}\n    {{ end }}\n{{ end }}\n\n{{ return $sharing }}\n"
  },
  {
    "path": "layouts/_partials/utilities/InitModules.html",
    "content": "{{ $critical := slice }}\n{{ $core := slice }}\n{{ $optional := slice }}\n{{ $excludeSCSS := slice }}\n{{ $disableTemplate := slice }}\n{{ $localize := slice }}\n{{ $category := dict }}\n{{ $modules := dict }}\n\n{{ range $key, $mod := .Site.Params.modules }}\n    {{ if reflect.IsMap $mod }}\n        {{ $integration := index $mod \"integration\" }}\n        {{ if eq $integration \"critical\" }}\n            {{ $critical = $critical | append $key }}\n        {{ else if eq $integration \"core\" }}\n            {{ $core = $core | append $key }}\n        {{ else if eq $integration \"optional\" }}\n            {{ $optional = $optional | append $key }}\n        {{ else if $integration }}\n            {{ warnf \"Unrecognized module integration setting: %s\" $integration }}\n        {{ end }}\n        \n        {{ if eq (index $mod \"excludeSCSS\") true }}\n            {{ $excludeSCSS = $excludeSCSS | append $key }}\n        {{ end }}\n\n        {{ if eq (index $mod \"disableTemplate\") true }}\n            {{ $disableTemplate = $disableTemplate | append $key }}\n        {{ end }}\n\n        {{ if eq (index $mod \"localize\") true }}\n            {{ $localize = $localize | append $key }}\n        {{ end }}\n\n        {{ $categoryKey := \"other\" }}\n        {{ with (index $mod \"category\") }}{{ $categoryKey = . }}{{ end }}\n        {{ $cat := index $category $categoryKey | default slice }}\n        {{ $cat = $cat | append $key}}\n        {{ $category = merge $category (dict $categoryKey $cat) }}\n\n        {{ $modules = merge $modules (dict $key $mod) }}\n    {{ else }}\n        {{ warnf \"Unsupported module parameter: %s\" $key }}\n    {{ end }}\n{{ end }}\n\n{{ $modules := dict \n    \"modules\"         $modules\n    \"critical\"        $critical\n    \"core\"            $core\n    \"optional\"        $optional\n    \"excludeSCSS\"     $excludeSCSS\n    \"disableTemplate\" $disableTemplate\n    \"localize\"        $localize\n    \"categories\"      $category\n}}\n\n{{- if and .IsPage (not (in $core \"bootstrap\")) -}}\n    {{- errorf \"Bootstrap is a required module, please add it to 'modules.core' in your site parameters\" -}}\n{{- end -}}\n\n{{ return $modules }}"
  },
  {
    "path": "layouts/_partials/utilities/git.html",
    "content": "{{ with .GitInfo }}\n&bull;&nbsp;<a href=\"{{ site.Params.docs.github | default site.Params.schema.github }}/commit/{{ .Hash }}\">{{ .Subject }} ({{ .AbbreviatedHash }})</a>\n{{ end -}}"
  },
  {
    "path": "layouts/_shortcodes/abbr.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{ $error := false }}\n\n{{/* Validate and initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"abbr\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") }}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\"  \"shortcodes/abbr.html\" \n        \"warnid\"   \"warn-invalid-arguments\"\n        \"msg\"      \"Invalid arguments\"\n        \"details\"  ($args.errmsg | append $args.warnmsg)\n        \"file\"     page.File\n        \"position\" .Position\n    )}}\n    {{ $error = $args.err }}\n{{ end }}\n\n{{/* Initialize arguments and default values */}}\n{{ $entries := slice }}\n{{ $title := \"\" }}\n\n{{/* Main code */}}\n{{ if not $error }}\n    {{/* Try language-specific file first */}}\n    {{ $path := path.Join (path.Dir $args.data) (printf \"%s.%s\" (path.BaseName $args.data) .Page.Language.Lang) (path.Ext $args.data) }}\n    {{ $entries = index site.Data $path }}\n    {{/* Use exact provided path as backup */}}\n    {{ if not $entries -}}\n        {{ $entries = index site.Data $args.data }}\n    {{ end }}\n    {{ if not $entries -}}\n        {{ errorf \"Invalid abbrevation data '%s': %s\" $args.data .Position -}}\n        {{ $error = true }}\n    {{ end -}}\n{{ end }}\n\n{{ if not $error }}\n    {{ $elements := (where $entries \"id\" (lower $args.key)) }}\n    {{ if gt (len $elements) 0 }}\n        {{ $title = index (index $elements 0) \"long\" }}\n    {{ end -}}\n    {{ if not $title -}}\n        {{ errorf \"Cannot find value for '%s': %s\" $args.key .Position -}}\n        {{ $error = true }}\n    {{ end -}}\n{{ end }}\n\n{{ if not $error }}\n    <abbr {{ with $args.class }}class=\"{{ . }}\"{{ end }} title=\"{{ $title }}\" tabindex=\"0\">{{ $args.key }}</abbr>\n{{ end }}\n"
  },
  {
    "path": "layouts/_shortcodes/abbr.md",
    "content": "{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"abbr\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") -}}\n{{- if not $args.err -}}\n{{- $entries := index site.Data $args.data -}}\n{{- $title := \"\" -}}\n{{- with where $entries \"id\" (lower $args.key) -}}{{- $title = index (index . 0) \"long\" -}}{{- end -}}\n{{ $args.key }}{{ with $title }} ({{ . }}){{ end -}}\n{{- end -}}\n"
  },
  {
    "path": "layouts/_shortcodes/accordion-item.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{ $error := false }}\n\n{{/* Validate and initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"accordion-item\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") }}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\"  \"shortcodes/accordion-item.html\" \n        \"warnid\"   \"warn-invalid-arguments\"\n        \"msg\"      \"Invalid arguments\"\n        \"details\"  ($args.errmsg | append $args.warnmsg)\n        \"file\"     page.File\n        \"position\" .Position\n    )}}\n    {{ $error = $args.err }}\n{{ end }}\n\n{{ if not .Parent }}\n    {{ errorf \"Cannot use isolated accordion-item, wrap it in an accordion: %s\" .Position -}}\n    {{ $error = true }}\n{{ end }}\n\n{{/* Initialize arguments and default values */}}\n{{- $id := .Ordinal -}}\n{{ $parent := \"\" }}\n{{ if not $error }}\n    {{- $parent = printf \"accordion-%d\" .Parent.Ordinal -}}\n    {{- with (.Parent.Get \"id\") -}}\n        {{- $parent = . -}}\n    {{- end -}}\n{{- end -}}\n\n{{ $body := trim .Inner \" \\r\\n\" -}}\n{{ if not $body -}}\n    {{ if .Parent }}\n        {{ errorf \"Missing inner element text: %s\" .Parent.Position -}}\n    {{ else }}\n        {{ errorf \"Missing inner element text: %s\" .Position -}}\n    {{ end }}\n    {{ $error = true }}\n{{ end -}}\n\n{{/* Main code */}}\n{{ $show := false -}}\n{{ if not $error }}\n    <div class=\"accordion-item\">\n        {{- with (or $args.title $args.header) -}}\n        <div id=\"{{ $parent }}-heading-{{ $id }}\" class=\"accordion-header m-0 fs-2\">\n            <button class=\"accordion-button{{ if not $args.show }} collapsed{{ end }}\"\n                type=\"button\"\n                data-bs-toggle=\"collapse\"\n                data-bs-target=\"#{{ $parent }}-item-{{ $id }}\"\n                aria-expanded=\"false\"\n                aria-controls=\"{{ $parent }}-item-{{ $id }}\"\n            >\n            {{ . }}\n            </button>\n        </div>\n        {{- end -}}\n        <div id=\"{{ $parent }}-item-{{ $id }}\" \n            class=\"accordion-collapse collapse{{ if $args.show }} show{{ end }}{{ with $args.class }} {{ . }}{{ end }}\"\n            aria-labelledby=\"{{ $parent }}-heading-{{ $id }}\"\n            data-bs-parent=\"#{{ $parent }}\"\n        >\n            <div class=\"accordion-body\">{{ $body | .Page.RenderString | safeHTML }}</div>\n        </div>\n    </div>\n{{ end }}"
  },
  {
    "path": "layouts/_shortcodes/accordion-item.md",
    "content": "{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"accordion-item\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") -}}\n{{- if not $args.err -}}\n{{- $title := or $args.title $args.header -}}\n{{ with $title }}### {{ . }}\n\n{{ end -}}\n{{ trim .Inner \" \\r\\n\" }}\n{{- end -}}\n"
  },
  {
    "path": "layouts/_shortcodes/accordion.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{/* Validate and initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"accordion\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") }}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\"  \"shortcodes/accordion.html\" \n        \"warnid\"   \"warn-invalid-arguments\"\n        \"msg\"      \"Invalid arguments\"\n        \"details\"  ($args.errmsg | append $args.warnmsg)\n        \"file\"     page.File\n        \"position\" .Position\n    )}}\n{{ end }}\n\n{{/* Initialize arguments and default values */}}\n{{- $id := $args.id | default (printf \"accordion-%d\" .Ordinal) -}}\n{{- $body := chomp .Inner -}}\n\n{{- if $args.alwaysOpen -}}\n    {{- $pattern := printf \"data-bs-parent=\\\"#%s\\\"\" $id -}}\n    {{- $body = (replace .Inner $pattern \"\") }}\n{{- end -}}\n\n{{/* Main code */}}\n{{ if not $args.error }}\n    <div id=\"{{ $id }}\" class=\"accordion mb-3{{ with $args.class }} {{ . }}{{ end }}\">\n        {{- $body | safeHTML -}}\n    </div>\n{{ end }}"
  },
  {
    "path": "layouts/_shortcodes/accordion.md",
    "content": "{{ .Inner -}}\n"
  },
  {
    "path": "layouts/_shortcodes/alert.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{ $error := false }}\n\n{{/* Validate and initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"alert\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") }}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\"  \"shortcodes/alert.html\" \n        \"warnid\"   \"warn-invalid-arguments\"\n        \"msg\"      \"Invalid arguments\"\n        \"details\"  ($args.errmsg | append $args.warnmsg)\n        \"file\"     page.File\n        \"position\" .Position\n    )}}\n    {{ $error = $args.err }}\n{{ end }}\n\n{{/* Initialize arguments and default values */}}\n{{ $color := $args.color -}}\n{{ $icon := $args.icon }}\n{{- $admonition := partial \"utilities/GetThemeIcon.html\" (dict \"id\" \"admonition\" \"default\" dict) -}}\n{{ if eq $args.alertType \"danger\" }}\n    {{ $icon = ($admonition.warning | default \"fas triangle-exclamation\") }}\n    {{ $color = \"danger\" }}\n{{ else if eq $args.alertType \"info\" }}\n    {{ $icon = ($admonition.info | default \"fas circle-info\") }}\n    {{ $color = \"info\" }}\n{{ end }}\n{{ with $icon }}\n    {{ $icon = partial \"assets/icon.html\" (dict \"icon\" . \"class\" \"fa-2x fa-fw\") }}\n{{ end }}\n\n{{ $body := trim .Inner \" \\r\\n\" -}}\n{{ if not $body -}}\n    {{ errorf \"Missing inner element text: %s\" .Position -}}\n    {{ $error = true }}\n{{ end -}}\n\n{{/* Main code */}}\n{{- if not $error -}}\n    <div class=\"d-flex alert alert-{{ $color }} {{ if $args.dismissible }}alert-dismissible fade show{{ end }}{{ with $args.class }} {{ . }}{{ end }}\" \n        role=\"alert\">\n        {{ with $icon }}<div class=\"pt-1 pe-2\">{{ . }}</div>{{ end }}\n        <div class=\"flex-grow-1 my-auto\">\n            {{ $body | .Page.RenderString | safeHTML -}}\n            {{ if $args.dismissible }}<button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"alert\" aria-label=\"{{ T \"close\" }}\"></button>{{ end }}\n        </div>\n    </div>\n{{- end -}}"
  },
  {
    "path": "layouts/_shortcodes/alert.md",
    "content": "{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"alert\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") -}}\n{{- if not $args.err -}}\n{{- $body := trim .Inner \" \\r\\n\" | plainify -}}\n{{- $callout := \"NOTE\" -}}\n{{- if eq $args.alertType \"danger\" -}}{{- $callout = \"WARNING\" -}}{{- end -}}\n> [!{{ $callout }}]\n> {{ $body }}\n{{- end -}}\n"
  },
  {
    "path": "layouts/_shortcodes/args.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{- $error := false -}}\n\n{{/* Validate and initialize arguments */}}\n{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"args\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") -}}\n{{- if or $args.err $args.warnmsg -}}\n    {{- partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\"  \"shortcodes/args.html\" \n        \"warnid\"   \"warn-invalid-arguments\"\n        \"msg\"      \"Invalid arguments\"\n        \"details\"  ($args.errmsg | append $args.warnmsg)\n        \"file\"     page.File\n        \"position\" .Position\n    ) -}}\n    {{- $error = $args.err -}}\n{{- end -}}\n\n{{/* Main code */}}\n{{- if not $args.err -}}\n    {{- partial \"assets/args.html\" (dict \n        \"page\"         .Page\n        \"structure\"    $args.structure\n        \"group\"        $args.group\n        \"parent\"       $args.parent\n        \"render-type\"  $args.renderType\n        \"header-level\" $args.headerLevel\n        \"_default\"     $args.default\n    ) -}}\n{{- end -}}\n"
  },
  {
    "path": "layouts/_shortcodes/args.md",
    "content": "{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"args\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") -}}\n{{- if not $args.err -}}\n{{- $structDef := index site.Data.structures $args.structure -}}\n{{- /* Fallback: resolve bookshop-{name} from the mounted component blueprint */ -}}\n{{- if and (not $structDef) (strings.HasPrefix $args.structure \"bookshop-\") -}}\n  {{- $compName := strings.TrimPrefix \"bookshop-\" $args.structure -}}\n  {{- $blueprint := index (index (index site.Data.structures.components $compName) (printf \"%s.bookshop\" $compName)) \"blueprint\" | default dict -}}\n  {{- if $blueprint -}}\n    {{- $bpArgs := dict -}}\n    {{- range $k, $v := $blueprint -}}\n      {{- $kebab := $k | replaceRE \"_\" \"-\" -}}\n      {{- $bpArgs = merge $bpArgs (dict $kebab nil) -}}\n    {{- end -}}\n    {{- $structDef = dict \"arguments\" $bpArgs -}}\n  {{- end -}}\n{{- end -}}\n{{- with $structDef -}}\n{{- $globalArgs := ((index site.Data.structures \"_arguments\") | default dict).arguments | default dict -}}\n{{- $rows := slice -}}\n{{- range $key, $val := .arguments -}}\n{{- if and $val (reflect.IsMap $val) -}}{{- if $val.deprecated }}{{ continue }}{{ end -}}{{- end -}}\n{{- $g := index $globalArgs $key | default dict -}}\n{{- $argMap := dict -}}\n{{- if and $val (reflect.IsMap $val) }}{{- $argMap = $val -}}{{ end -}}\n{{- $merged := merge $g $argMap -}}\n{{- if and $args.group $merged.group (ne $merged.group $args.group) }}{{ continue }}{{ end -}}\n{{- $required := \"\" -}}\n{{- if not (default false $merged.optional) }}{{- $required = \"yes\" -}}{{ end -}}\n{{- $default := \"\" -}}\n{{- with $merged.default }}{{- $default = printf \"`%v`\" . -}}{{ end -}}\n{{- $comment := $merged.comment | default \"\" | replaceRE \"\\n\" \" \" -}}\n{{- if $merged.options.values -}}{{- $comment = printf \"%s Supported values: [`%s`].\" $comment (delimit $merged.options.values \"`, `\") -}}{{- end -}}\n{{- $typeVal := $merged.type | default \"string\" -}}\n{{- if reflect.IsSlice $typeVal }}{{- $typeVal = index $typeVal 0 | default \"string\" -}}{{ end -}}\n{{- $rows = $rows | append (printf \"| `%s` | %s | %s | %s | %s |\" $key $typeVal $required $default $comment) -}}\n{{- end -}}\n{{- if $rows }}\n\n| Name | Type | Required | Default | Description |\n| --- | --- | --- | --- | --- |\n{{ delimit $rows \"\\n\" }}\n{{- end -}}\n{{- end -}}\n{{- end -}}\n"
  },
  {
    "path": "layouts/_shortcodes/badge.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{/* Validate and initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"badge\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") }}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\"  \"shortcodes/badge.html\" \n        \"warnid\"   \"warn-invalid-arguments\"\n        \"msg\"      \"Invalid arguments\"\n        \"details\"  ($args.errmsg | append $args.warnmsg)\n        \"file\"     page.File\n        \"position\" .Position\n    )}}\n{{ end }}\n\n{{/* Main code */}}\n{{- if not $args.err }}\n    <span class=\"badge text-bg-{{ $args.color }}{{ with $args.class }} {{ . }}{{ end }}\">{{ $args.title | plainify }}</span>\n{{ end -}}\n"
  },
  {
    "path": "layouts/_shortcodes/badge.md",
    "content": "{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"badge\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") -}}\n{{- if not $args.err -}}\n{{ $args.title | plainify -}}\n{{- end -}}\n"
  },
  {
    "path": "layouts/_shortcodes/breadcrumb.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{ $error := false }}\n\n{{/* Validate and initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"breadcrumb\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") }}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\"  \"shortcodes/breadcrumb.html\" \n        \"warnid\"   \"warn-invalid-arguments\"\n        \"msg\"      \"Invalid arguments\"\n        \"details\"  ($args.errmsg | append $args.warnmsg)\n        \"file\"     page.File\n        \"position\" .Position\n    )}}\n    {{ $error = $args.err }}\n{{ end }}\n\n{{/* Initialize arguments and default values */}}\n{{- $page := .Page -}}\n{{- if $args.path -}}\n    {{- $page = .Site.GetPage $args.path -}}\n    {{- if not $page -}}\n        {{- errorf \"Invalid or missing value for param 'path': %s\" .Position -}}\n        {{- $error = true -}}\n    {{- end -}}\n{{- end -}}\n\n{{/* Main code */}}\n{{- if not $error -}}\n    {{- partial \"assets/breadcrumb.html\" (dict \"page\" $page) -}}\n{{- end -}}"
  },
  {
    "path": "layouts/_shortcodes/breadcrumb.md",
    "content": "{{- /* Breadcrumb is decorative — no meaningful output for LLM */ -}}\n"
  },
  {
    "path": "layouts/_shortcodes/button-group.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{/* Validate and initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"button-group\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") }}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\"  \"shortcodes/button-group.html\" \n        \"warnid\"   \"warn-invalid-arguments\"\n        \"msg\"      \"Invalid arguments\"\n        \"details\"  ($args.errmsg | append $args.warnmsg)\n        \"file\"     page.File\n        \"position\" .Position\n    )}}\n{{ end }}\n\n{{/* Initialize local arguments */}}\n{{ $label := or $args.label $args.ariaLabel }}\n{{ $role := or $args.ariaRole \"group\" }}\n{{ $inner := .Scratch.Get \"inner\" }}\n{{ $input := trim .Inner \" \\r\\n\" }}\n{{ if $input }}\n    {{ $input = replace $input \"\\n\" \"\\n  \" }}\n    {{ warnf \"Unexpected inner content: %s\\r\\n      %s\" .Position $input }}\n{{ end }}\n\n{{/* Main code */}}\n{{ if not $args.err }}\n    <div class=\"btn-group\" role=\"{{ $role }}\"\n        {{ with $label }}aria-label=\"{{ . }}\"{{ end -}}\n        {{- range $key, $val := $args.attributes }} {{ printf \"%s=%q\" $key $val | safeHTMLAttr }}{{ end -}}\n    >\n        {{ $inner | safeHTML }}\n    </div>\n{{ end }}"
  },
  {
    "path": "layouts/_shortcodes/button-group.md",
    "content": "{{ .Inner -}}\n"
  },
  {
    "path": "layouts/_shortcodes/button.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{ $error := false }}\n\n{{/* Validate and initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"button\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") }}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\"  \"shortcodes/button.html\" \n        \"warnid\"   \"warn-invalid-arguments\"\n        \"msg\"      \"Invalid arguments\"\n        \"details\"  ($args.errmsg | append $args.warnmsg)\n        \"file\"     page.File\n        \"position\" .Position\n    )}}\n    {{ $error = $args.err }}\n{{ end }}\n\n{{/* Initialize arguments */}}\n{{ $label := or $args.label $args.ariaLabel -}}\n{{ $title := trim .Inner \" \\r\\n\" | .Page.RenderString -}}\n{{ if not (or $title $args.icon) -}}\n    {{ errorf \"Missing icon or inner element text: %s\" .Position -}}\n    {{ $error = true }}\n{{ end -}}\n{{ $href := $args.href -}}\n{{ if $args.relref }}\n    {{ $href = relref . $args.relref }}\n{{ end }}\n{{ $spacing := cond .Parent false $args.spacing }}\n\n{{/* Main code */}}\n{{ if not $error }}\n    {{- $output := partial \"assets/button.html\" (dict \n        \"link-type\" (or $args.linkType $args.type)\n        \"title\"        $title\n        \"button-size\"  (or $args.buttonSize $args.size)\n        \"color\"        $args.color\n        \"outline\"      $args.outline\n        \"badge\"        $args.badge\n        \"label\"        $label\n        \"tooltip\"      $args.tooltip\n        \"clipboard\"    $args.clipboard\n        \"collapse-id\"  (or $args.collapseId $args.collapse)\n        \"href\"         $args.href\n        \"id\"           $args.id\n        \"button-state\" (or $args.buttonState $args.state)\n        \"class\"        $args.class\n        \"placement\"    $args.placement\n        \"icon\"         $args.icon\n        \"icon-class\"   $args.iconClass\n        \"order\"        $args.order\n        \"justify\"      $args.justify\n        \"cue\"          $args.cue\n        \"tab\"          $args.tab\n        \"toast-id\"     (or $args.toastId $args.toast)\n        \"spacing\"      $spacing\n        \"_default\"     $args.default\n    ) -}}\n\n    {{ with $args.wrapper }}\n        {{ $output = printf `<div class=\"%s\">%s</div>` . $output }}\n    {{ end }}\n\n    {{- if .Parent -}}\n        {{ $current := .Parent.Scratch.Get \"inner\" }}\n        {{ if $current }}\n            {{ .Parent.Scratch.Set \"inner\" (print $current $output) }}\n        {{ else }}\n            {{ .Parent.Scratch.Set \"inner\" $output }}\n        {{ end }}\n    {{- else -}}\n        {{ $output | safeHTML }}\n    {{- end -}}\n{{ end }}\n"
  },
  {
    "path": "layouts/_shortcodes/button.md",
    "content": "{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"button\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") -}}\n{{- if not $args.err -}}\n{{- $title := trim .Inner \" \\r\\n\" | plainify -}}\n{{- $href := $args.href -}}\n{{- if $args.relref }}{{- $href = relref . $args.relref -}}{{- end -}}\n{{- if $href -}}\n[{{ $title }}]({{ $href }})\n{{- else -}}\n{{ $title }}\n{{- end -}}\n{{- end -}}\n"
  },
  {
    "path": "layouts/_shortcodes/card-group.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{ $error := false }}\n\n{{/* Validate and initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"card-group\" \"child\" \"card\" \"args\" .Params \"named\" .IsNamedParams) }}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\"  \"shortcodes/card-group.html\" \n        \"warnid\"   \"warn-invalid-arguments\"\n        \"msg\"      \"Invalid arguments\"\n        \"details\"  ($args.errmsg | append $args.warnmsg)\n        \"file\"     page.File\n        \"position\" .Position\n    )}}\n    {{ $error = $args.err }}\n{{ end }}\n\n{{/* Initialize arguments and default values */}}\n{{- $cols := .Get \"cols\" | default \"3\" -}}\n{{- $gutter := .Get \"gutter\" | default \"4\" -}}\n{{- $title := .Get \"title\" | default \"\" -}}\n{{- $separator := .Get \"separator\" | default \"\" -}}\n{{- $wrapper := .Get \"wrapper\" | default \"\" -}}\n{{- $responsive := .Get \"responsive\" | default true -}}\n\n{{/* Initialize arguments passed to individual cards */}}\n{{- $class := .Get \"class\" | default \"\" -}}\n{{- $color := .Get \"color\" | default \"\" -}}\n{{- $padding := .Get \"padding\" | default 3 -}}\n{{- $header := .Get \"header-style\" | default \"\" -}}\n{{- $body := .Get \"body-style\" | default \"\" -}}\n{{- $footer := .Get \"footer-style\" | default \"\" -}}\n{{- $orientation := .Get \"orientation\" | default \"\" -}}\n{{- $align := .Get \"align\" | default \"start\" -}}\n{{- $style := .Get  \"icon-style\" | default \"\" -}}\n{{- $subtle := .Get \"subtle\" | default false -}}\n{{- $button := .Get \"button\" | default false -}}\n{{- $linkIcon := .Get \"link-icon\" | default false -}}\n{{- $buttonType := .Get \"link-type\" | default \"\" -}}\n{{- $iconRounded := .Get \"icon-rounded\" | default false -}}\n{{- with .Get \"header\" }}{{- $header = . -}}{{- end -}}\n{{- with .Get \"footer\" }}{{- $footer = . -}}{{- end -}}\n{{- with .Get \"style\" }}{{- $style = . -}}{{- end -}}\n{{- with .Get \"buttonType\" }}{{- $buttonType = . -}}{{- end -}}\n{{- with .Get \"iconRounded\" }}{{- $iconRounded = . -}}{{- end -}}\n{{- $scroll := .Get \"scroll\" | default false -}}\n\n{{ $inner := .Scratch.Get \"inner\" }}\n{{ $input := trim .Inner \" \\r\\n\" }}\n{{ if $input }}\n    {{ $input = replace $input \"\\n\" \"\\n  \" }}\n    {{ warnf \"Unexpected inner content: %s\\r\\n      %s\" .Position $input }}\n{{ end }}\n\n{{/* Main code */}}\n{{- partial \"assets/card-group.html\" (dict \n    \"page\"         .Page\n    \"cards\"        $inner\n    \"cols\"         $cols\n    \"gutter\"       $gutter\n    \"title\"        $title\n    \"separator\"    $separator\n    \"wrapper\"      $wrapper\n    \"responsive\"   $responsive\n    \"class\"        $class\n    \"color\"        $color\n    \"padding\"      $padding\n    \"header-style\" $header\n    \"body-style\"   $body\n    \"footer-style\" $footer\n    \"orientation\"  $orientation\n    \"align\"        $align\n    \"icon-style\"   $style\n    \"subtle\"       $subtle\n    \"button\"       $button\n    \"link-icon\"    $linkIcon\n    \"link-type\"    $buttonType\n    \"icon-rounded\" $iconRounded\n    \"scroll\"       $scroll\n    \"bento\"        $args.bento\n    \"valign\"       $args.valign\n    \"loading\"      $args.loading\n    \"_default\"     $args.default\n    ) \n-}}\n"
  },
  {
    "path": "layouts/_shortcodes/card-group.md",
    "content": "{{ .Inner -}}\n"
  },
  {
    "path": "layouts/_shortcodes/card.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{ $error := false }}\n\n{{/* Validate and initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"card\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") }}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\"  \"shortcodes/card.html\" \n        \"warnid\"   \"warn-invalid-arguments\"\n        \"msg\"      \"Invalid arguments\"\n        \"details\"  ($args.errmsg | append $args.warnmsg)\n        \"file\"     page.File\n        \"position\" .Position\n    )}}\n    {{ $error = $args.err }}\n{{ end }}\n\n{{/* Initialize arguments and default values */}}\n{{/* TODO: use initargs instead of GetArgParent */}}\n{{- $alt := .Get \"alt\" -}}\n{{- $class := partial \"utilities/GetArgParent\" (dict \"page\" . \"arg\" \"class\" \"merge\" true) -}}\n{{- $color := partial \"utilities/GetArgParent\" (dict \"page\" . \"arg\" \"color\") -}}\n{{- $description := trim .Inner \" \\r\\n\" | .Page.RenderString | safeHTML -}}\n{{- $footer := or (partial \"utilities/GetArgParent\" (dict \"page\" . \"arg\" \"footer-style\")) (partial \"utilities/GetArgParent\" (dict \"page\" . \"arg\" \"footer\")) -}}\n{{- $gutter := partial \"utilities/GetArgParent\" (dict \"page\" . \"arg\" \"gutter\") -}}\n{{- $body := or (partial \"utilities/GetArgParent\" (dict \"page\" . \"arg\" \"body-style\")) (partial \"utilities/GetArgParent\" (dict \"page\" . \"arg\" \"body\"))  -}}\n{{- $header := or (partial \"utilities/GetArgParent\" (dict \"page\" . \"arg\" \"header-style\")) (partial \"utilities/GetArgParent\" (dict \"page\" . \"arg\" \"header\"))  -}}\n{{- $icon := .Get \"icon\" -}}\n{{- $iconRounded := or (partial \"utilities/GetArgParent\" (dict \"page\" . \"arg\" \"icon-rounded\")) (partial \"utilities/GetArgParent\" (dict \"page\" . \"arg\" \"iconRounded\")) -}}\n{{- $align := partial \"utilities/GetArgParent\" (dict \"page\" . \"arg\" \"align\") | default \"start\" -}}\n{{- $style := or (partial \"utilities/GetArgParent\" (dict \"page\" . \"arg\" \"icon-style\")) (partial \"utilities/GetArgParent\" (dict \"page\" . \"arg\" \"style\")) -}}\n{{- $subtle := partial \"utilities/GetArgParent\" (dict \"page\" . \"arg\" \"subtle\") -}}\n{{- $loading := .Get \"loading\" -}}\n{{- $orientation := partial \"utilities/GetArgParent\" (dict \"page\" . \"arg\" \"orientation\") -}}\n{{- $padding := partial \"utilities/GetArgParent\" (dict \"page\" . \"arg\" \"padding\") | default 3 -}}\n{{- $ratio := partial \"utilities/GetArgParent\" (dict \"page\" . \"arg\" \"ratio\") -}}\n{{- $portrait := partial \"utilities/GetArgParent\" (dict \"page\" . \"arg\" \"portrait\") -}}\n{{- $page := .Page -}}\n{{- $path := .Get \"path\" -}}\n{{- $thumbnail := .Get \"thumbnail\" -}}\n{{- $anchor := .Get \"anchor\" -}}\n{{- $title := .Get \"title\" -}}\n{{- $button := partial \"utilities/GetArgParent\" (dict \"page\" . \"arg\" \"button\") -}}\n{{- $linkIcon := partial \"utilities/GetArgParent\" (dict \"page\" . \"arg\" \"link-icon\") -}}\n{{- $linkType := or (partial \"utilities/GetArgParent\" (dict \"page\" . \"arg\" \"link-type\")) (partial \"utilities/GetArgParent\" (dict \"page\" . \"arg\" \"buttonType\")) -}}\n{{- $cols := partial \"utilities/GetArgParent\" (dict \"page\" . \"arg\" \"cols\") -}}\n{{- $scroll := partial \"utilities/GetArgParent\" (dict \"page\" . \"arg\" \"scroll\") -}}\n{{- $wrapper := \"\" -}}\n\n{{/* Override arguments */}}\n{{- if $path }}\n    {{ $page := partial \"utilities/GetPage.html\" (dict \"url\" $args.path \"page\" (or $args.page page)) }}\n    {{ $validate := site.Params.main.internalLinks.validate | default true }}\n    {{- if and $validate (not $page) }}\n        {{- warnf \"Cannot find target page '%s': %s\" $path .Position -}}\n    {{- end }}\n{{- end }}\n\n{{ if .Parent }}\n    {{ $class = (printf \"h-100 %s\" $class) }}\n{{ end }}\n\n{{ if $scroll }}\n    {{ $wrapper = printf \"card-block-%d p-0\" $cols }}\n{{ end }}\n\n{{/* Main code */}}\n{{ if not $error -}}\n    {{/* Render card */}}\n    {{- $output := partial \"assets/card.html\" (dict \n        \"path\"         $path\n        \"href\"         $args.href\n        \"title\"        $title\n        \"exact\"        $args.exact\n        \"class\"        $class\n        \"gutter\"       $gutter\n        \"color\"        $color\n        \"padding\"      $padding\n        \"header-style\" $header\n        \"body-style\"   $body\n        \"footer-style\" $footer\n        \"orientation\"  $orientation\n        \"description\"  $description\n        \"ratio\"        $ratio\n        \"portrait\"     $portrait\n        \"icon\"         $icon\n        \"icon-rounded\" $iconRounded\n        \"align\"        $align\n        \"icon-style\"   $style\n        \"subtle\"       $subtle\n        \"scroll\"       $scroll\n        \"wrapper\"      $wrapper\n        \"thumbnail\"    $thumbnail\n        \"loading\"      $loading\n        \"anchor\"       $anchor\n        \"alt\"          $alt\n        \"button\"       $button\n        \"button-label\" $args.buttonLabel\n        \"link-icon\"    $linkIcon\n        \"link-type\"    $linkType\n        \"_default\"     $args.default\n    ) -}}\n\n    {{/* Pass output to parent or current stream */}}\n    {{ with .Parent }}\n        {{ $current := .Scratch.Get \"inner\" }}\n        {{ if $current }}\n            {{ .Scratch.Set \"inner\" (print $current $output) }}\n        {{ else }}\n            {{ .Scratch.Set \"inner\" $output }}\n        {{ end }}\n    {{ else }}\n        {{ print $output | safeHTML }}\n    {{ end }}\n{{ end -}}"
  },
  {
    "path": "layouts/_shortcodes/card.md",
    "content": "{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"card\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") -}}\n{{- if not $args.err -}}\n{{- $title := .Get \"title\" -}}\n{{- $description := trim .Inner \" \\r\\n\" | plainify -}}\n{{ with $title }}**{{ . }}**{{ if $description }}: {{ end }}{{ end -}}\n{{- $description }}\n{{- end -}}\n"
  },
  {
    "path": "layouts/_shortcodes/carousel.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{/* Initialize arguments */}}\n{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"carousel\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") -}}\n{{- if or $args.err $args.warnmsg -}}\n    {{- partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\"  \"shortcodes/carousel.html\" \n        \"warnid\"   \"warn-invalid-arguments\"\n        \"msg\"      \"Invalid arguments\"\n        \"details\"  ($args.errmsg | append $args.warnmsg)\n        \"file\"     page.File\n        \"position\" .Position\n    )}}\n{{- end -}}\n\n{{/* Initialize local arguments */}}\n{{- $id := $args.id | default (printf \"carousel-%d\" .Ordinal) -}}\n{{ $inner := .Scratch.Get \"inner\" }}\n{{ $input := trim .Inner \" \\r\\n\" }}\n{{ if $input }}\n    {{ $input = replace $input \"\\n\" \"\\n  \" }}\n    {{ warnf \"Unexpected inner content: %s\\r\\n      %s\" .Position $input }}\n{{ end }}\n{{ $items := len (findRE \"carousel-item\" $inner) -}}\n\n{{/* Main code */}}\n{{ if not $args.err }}\n    <div id=\"{{ $id }}\" class=\"carousel slide mb-3{{ with $args.class }} {{ . }}{{ end }}\" data-bs-ride=\"true\">\n        <div class=\"carousel-indicators\">\n            {{ range $index := (seq $items) -}}\n                <button type=\"button\" data-bs-target=\"#carousel-{{ $id }}\" data-bs-slide-to=\"{{ sub $index 1 }}\" {{ if eq $index 1 }}class=\"active\"{{ end }} aria-current=\"true\" aria-label=\"Slide {{ $index }}\"></button>\n            {{ end -}}\n        </div>\n        <div class=\"carousel-inner\">\n            {{ $inner | safeHTML }}\n        </div>\n        <button class=\"carousel-control-prev\" type=\"button\" data-bs-target=\"#{{ $id }}\" data-bs-slide=\"prev\">\n            <span class=\"carousel-control-prev-icon\" aria-hidden=\"true\"></span>\n            <span class=\"visually-hidden\">Previous</span>\n        </button>\n        <button class=\"carousel-control-next\" type=\"button\" data-bs-target=\"#{{ $id }}\" data-bs-slide=\"next\">\n            <span class=\"carousel-control-next-icon\" aria-hidden=\"true\"></span>\n            <span class=\"visually-hidden\">Next</span>\n        </button>\n    </div>\n{{ end }}"
  },
  {
    "path": "layouts/_shortcodes/carousel.md",
    "content": "{{ .Inner -}}\n"
  },
  {
    "path": "layouts/_shortcodes/collapse.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{ $error := false -}}\n\n{{/* Initialize arguments */}}\n{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"collapse\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") -}}\n{{- if or $args.err $args.warnmsg -}}\n    {{- partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\"  \"shortcodes/collapse.html\" \n        \"warnid\"   \"warn-invalid-arguments\"\n        \"msg\"      \"Invalid arguments\"\n        \"details\"  ($args.errmsg | append $args.warnmsg)\n        \"file\"     page.File\n        \"position\" .Position\n    )}}\n    {{ $error = $args.err -}}\n{{- end -}}\n\n{{/* Initialize local arguments */}}\n{{- $body := trim .Inner \" \\r\\n\" -}}\n{{ if not $body -}}\n    {{ errorf \"Missing inner element text: %s\" .Position -}}\n    {{ $error = true }}\n{{ end -}}\n\n{{/* Main code */}}\n{{ if not $error }}\n    <div class=\"collapse my-4\" id=\"{{ $args.id }}\">\n        <div{{ with $args.class }} class=\"{{ . }}\"{{ end }}>{{ $body | .Page.RenderString }}</div>\n    </div>\n{{ end }}"
  },
  {
    "path": "layouts/_shortcodes/collapse.md",
    "content": "{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"collapse\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") -}}\n{{- if not $args.err -}}\n{{ trim .Inner \" \\r\\n\" -}}\n{{- end -}}\n"
  },
  {
    "path": "layouts/_shortcodes/command.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{ $symbols := dict \n    \"bash\"       (dict \"prompt\" \"$\"    \"contPrompt\" \">\"  \"contString\" \"\\\\\")\n    \"powershell\" (dict \"prompt\" \"PS>\"  \"contPrompt\" \">>\" \"contString\" \"`\")\n    \"sql\"        (dict \"prompt\" \"sql>\" \"contPrompt\" \"->\" \"contString\" \"(con)\")\n}}\n\n{{/* Initialize arguments */}}\n{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"command\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") -}}\n{{- if or $args.err $args.warnmsg -}}\n    {{- partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\"  \"shortcodes/command.html\" \n        \"warnid\"   \"warn-invalid-arguments\"\n        \"msg\"      \"Invalid arguments\"\n        \"details\"  ($args.errmsg | append $args.warnmsg)\n        \"file\"     page.File\n        \"position\" .Position\n    )}}\n{{- end -}}\n\n{{/* Initialize local arguments */}}\n{{- $prompt := $args.prompt | default (index (index $symbols $args.shell) \"prompt\") -}}\n{{- $contPrompt := index (index $symbols $args.shell) \"contPrompt\" -}}\n{{- $contString := index (index $symbols $args.shell) \"contString\" -}}\n{{- $filter := \"(out)\" -}}\n{{- $input := trim .Inner \" \\t\\r\\n\" -}}\n{{- if (and (eq $args.shell \"bash\") $args.host $args.user) -}}\n    {{- $prompt = printf \"[%s@%s] %s\" $args.user $args.host $prompt -}}\n{{- end -}}\n\n{{/* Main code */}}\n{{ if not $args.err }}\n    {{- $lines := split $input \"\\n\" -}}\n    {{- $prefix := \"\" -}}\n    {{- $prevLine := \"\" -}}\n    {{- $refined := \"\" -}}\n    {{- range $line := $lines -}}\n        {{- $line = trim $line \" \\t\\r\\n\" -}}\n        {{- if hasPrefix $line $filter -}}\n            {{- $prefix = printf \"%s<span></span>\" $prefix -}}\n            {{- if eq $args.shell \"sql\" -}}\n                {{- $line = printf \"--%s\" (strings.TrimPrefix $filter $line) -}}\n            {{- else -}}\n                {{- $line = printf \"#%s\" (strings.TrimPrefix $filter $line) -}}\n            {{- end -}}\n        {{- else if (strings.HasSuffix $prevLine $contString) -}}\n            {{- $prefix = printf \"%s<span data-prompt=\\\"%s\\\"></span>\" $prefix $contPrompt -}}\n        {{- else -}}\n            {{- $prefix = printf \"%s<span data-prompt=\\\"%s\\\"></span>\" $prefix $prompt -}}\n        {{- end -}}\n        {{- $prevLine = $line -}}\n        {{- if (and (eq $args.shell \"sql\") (strings.HasSuffix $line $contString)) -}}\n            {{- $line = strings.TrimSuffix $contString $line -}}\n        {{- end -}}\n        {{- $refined = printf \"%s\\n%s\" $refined $line -}}\n    {{- end -}}\n\n    {{- $refined := trim $refined \"\\r\\n\" -}}\n    {{- $output := (transform.Highlight $refined $args.shell | safeHTML) -}}\n    {{- $insert := printf \"<span class=\\\"command-line-prompt\\\">%s</span><span class=\\\"line\\\">\" $prefix -}}\n    {{- $output := (replace $output (\"<span class=\\\"line\\\">\" | safeHTML) $insert 1 | safeHTML) -}}\n\n    {{- if eq $args.shell \"sql\" -}}\n        {{- $output = (replace $output \"<span class=\\\"c1\\\">--\" \"<span class=\\\"c1\\\">\" | safeHTML) -}}\n    {{- else -}}\n        {{- $output = (replace $output \"<span class=\\\"c1\\\">#\" \"<span class=\\\"c1\\\">\" | safeHTML) -}}\n        {{- $output = (replace $output \"<span class=\\\"c\\\">#\" \"<span class=\\\"c\\\">\" | safeHTML) -}}\n    {{- end -}}\n\n    <div class=\"command syntax-highlight mb-3{{ with $args.class }} {{ . }}{{ end }}\">\n        {{- $output -}}\n    </div>\n{{ end }}"
  },
  {
    "path": "layouts/_shortcodes/command.md",
    "content": "{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"command\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") -}}\n{{- if not $args.err -}}\n{{- printf \"```%s\\n%s\\n```\" $args.shell (trim .Inner \" \\t\\r\\n\") -}}\n{{- end -}}\n"
  },
  {
    "path": "layouts/_shortcodes/docs.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n\n    This source code adapts the original embedded shortcode as maintained by the The Bootstrap Authors. It introduces\n    the following modifications:\n     - Added validation of shortcode arguments\n     - Modified the layout\n    \n    The original source code is available on:\n    https://github.com/twbs/bootstrap/blob/main/site/layouts/shortcodes/scss-docs.html\n    Copyright (c) 2011-2023 The Bootstrap Authors. Licensed under The MIT License (MIT).\n*/}}\n\n{{ $error := false -}}\n\n{{/* Initialize arguments */}}\n{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"docs\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") -}}\n{{- if or $args.err $args.warnmsg -}}\n    {{- partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\"  \"shortcodes/docs.html\" \n        \"warnid\"   \"warn-invalid-arguments\"\n        \"msg\"      \"Invalid arguments\"\n        \"details\"  ($args.errmsg | append $args.warnmsg)\n        \"file\"     page.File\n        \"position\" .Position\n    )}}\n    {{ $error = $args.err }}\n{{- end -}}\n\n{{/* Initialize local arguments */}}\n{{- $id := $args.id | default (printf \"docs-collapse-%d\" .Ordinal) -}}\n{{- $basePath := .Site.Params.docs.basePath -}}\n{{- $file := $args.file -}}\n{{- if hasPrefix $file \"./\" -}}\n    {{- $file = path.Clean $file -}}\n{{- else -}}\n    {{- $file = path.Join $basePath (path.Clean $file) -}}\n{{- end -}}\n{{- $extension := strings.TrimLeft \".\" (path.Ext $file)  }}\n{{- $captureStart := \"\" -}}\n{{- $captureEnd := \"\" -}}\n\n{{- $supportedExtensions := slice \"js\" \"scss\" \"toml\" -}}\n{{- if in $supportedExtensions $extension -}}\n    {{- if eq $extension \"toml\" }}\n        {{- $captureStart = printf \"# toml-docs-start %s\" $args.name -}}\n        {{- $captureEnd = printf \"# toml-docs-end %s\" $args.name -}}\n    {{- else -}}\n        {{- $captureStart = printf \"// %s-docs-start %s\" $extension $args.name -}}\n        {{- $captureEnd = printf \"// %s-docs-end %s\" $extension $args.name -}}\n    {{- end -}}\n{{- else -}}\n    {{- errorf \"File format not supported (line %s): %s\" .Position $file -}}\n{{- end -}}\n\n{{/* Main code */}}\n{{- if not $error -}}\n    {{- /* Check if the file exists, skip gracefully if not (e.g. local module replacement without vendor) */ -}}\n    {{- $statResult := try (os.Stat $file) -}}\n    {{- if $statResult.Err -}}\n        {{- warnf \"shortcodes/docs.html - Cannot find file: %q. Skipping.\" $file -}}\n        {{- $error = true -}}\n    {{- end -}}\n{{- end -}}\n{{- if not $error -}}\n    {{- $regex := printf `%s((?:.|\\n)*)%s` $captureStart $captureEnd -}}\n    {{- $match := findRE $regex (readFile $file) -}}\n    {{- $match = index $match 0 -}}\n\n    {{- if not $match -}}\n        {{- errorf \"%s: %q: Got no matches for name=%q in file=%q!\" .Position .Name $args.name $file -}}\n    {{- end -}}\n\n    {{- $match = replace $match $captureStart \"\" -}}\n    {{- $match = replace $match $captureEnd \"\" -}}\n\n    <div class=\"docs\">\n        <ul class=\"docs-controls nav nav-tabs{{ with $args.class }} {{ . }}{{ end }}\">\n            <li class=\"nav-item\">\n                <a class=\"nav-link active font-monospace\" \n                    href=\"#body-{{ $id }}\" \n                    aria-current=\"page\" \n                    data-bs-toggle=\"collapse\" \n                    data-bs-target=\".multi-{{ $id }}\" \n                    aria-expanded=\"false\" \n                    aria-controls=\"body-{{ $id }} footer-{{ $id }}\">\n                    <small>{{ if $args.full }}{{ strings.TrimPrefix \"/\" (strings.TrimPrefix $basePath $file) }}{{ else }}{{ path.Base $file }}{{ end }}</small>\n                </a>\n            </li>\n        </ul>\n        <div class=\"docs-panel mb-3\">\n            <div class=\"collapse multi-{{ $id }}{{ if $args.show }} show{{ end }} syntax-highlight\" id=\"body-{{ $id }}\">\n                {{- highlight (trim $match \"\\r\\n\") $extension \"\" -}}\n            </div>\n            <div class=\"collapse multi-{{ $id }}{{ if not $args.show }} show{{ end }} p-3\" id=\"footer-{{ $id }}\">\n                <a class=\"nav-link active\" \n                    href=\"#body-{{ $id }}\" \n                    aria-current=\"page\" \n                    data-bs-toggle=\"collapse\" \n                    data-bs-target=\".multi-{{ $id }}\" \n                    aria-expanded=\"false\" \n                    aria-controls=\"body-{{ $id }} footer-{{ $id }}\">\n                    <small><i>{{ T \"clickToExpand\" }}</i></small>\n                </a>\n            </div>\n        </div>\n    </div>\n{{- end -}}"
  },
  {
    "path": "layouts/_shortcodes/docs.md",
    "content": "{{ $error := false -}}\n\n{{/* Initialize arguments */}}\n{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"docs\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") -}}\n{{- if or $args.err $args.warnmsg -}}\n    {{- partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict\n        \"partial\"  \"shortcodes/docs.md\"\n        \"warnid\"   \"warn-invalid-arguments\"\n        \"msg\"      \"Invalid arguments\"\n        \"details\"  ($args.errmsg | append $args.warnmsg)\n        \"file\"     page.File\n        \"position\" .Position\n    )}}\n    {{ $error = $args.err }}\n{{- end -}}\n\n{{/* Initialize local arguments */}}\n{{- $basePath := .Site.Params.docs.basePath -}}\n{{- $file := $args.file -}}\n{{- if hasPrefix $file \"./\" -}}\n    {{- $file = path.Clean $file -}}\n{{- else -}}\n    {{- $file = path.Join $basePath (path.Clean $file) -}}\n{{- end -}}\n{{- $extension := strings.TrimLeft \".\" (path.Ext $file) -}}\n{{- $captureStart := \"\" -}}\n{{- $captureEnd := \"\" -}}\n\n{{- $supportedExtensions := slice \"js\" \"scss\" \"toml\" -}}\n{{- if in $supportedExtensions $extension -}}\n    {{- if eq $extension \"toml\" -}}\n        {{- $captureStart = printf \"# toml-docs-start %s\" $args.name -}}\n        {{- $captureEnd = printf \"# toml-docs-end %s\" $args.name -}}\n    {{- else -}}\n        {{- $captureStart = printf \"// %s-docs-start %s\" $extension $args.name -}}\n        {{- $captureEnd = printf \"// %s-docs-end %s\" $extension $args.name -}}\n    {{- end -}}\n{{- else -}}\n    {{- errorf \"File format not supported (line %s): %s\" .Position $file -}}\n{{- end -}}\n\n{{/* Main code */}}\n{{- if not $error -}}\n    {{- $statResult := try (os.Stat $file) -}}\n    {{- if $statResult.Err -}}\n        {{- warnf \"shortcodes/docs.md - Cannot find file: %q. Skipping.\" $file -}}\n        {{- $error = true -}}\n    {{- end -}}\n{{- end -}}\n{{- if not $error -}}\n    {{- $regex := printf `%s((?:.|\\n)*)%s` $captureStart $captureEnd -}}\n    {{- $match := findRE $regex (readFile $file) -}}\n    {{- $match = index $match 0 -}}\n\n    {{- if not $match -}}\n        {{- errorf \"%s: %q: Got no matches for name=%q in file=%q!\" .Position .Name $args.name $file -}}\n    {{- end -}}\n\n    {{- $match = replace $match $captureStart \"\" -}}\n    {{- $match = replace $match $captureEnd \"\" -}}\n\n```{{ $extension }}\n{{ trim $match \"\\r\\n\" }}\n```\n{{- end -}}\n"
  },
  {
    "path": "layouts/_shortcodes/example-bookshop.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n\n    This source code adapts the original embedded shortcode as maintained by the The Bootstrap Authors. It introduces\n    the following modifications:\n     - Added validation of shortcode arguments\n     - Modified the layout\n     - Added support to render bookshop components\n    \n    The original source code is available on:\n    Source: https://github.com/twbs/bootstrap/blob/main/site/layouts/shortcodes/example.html\n    Copyright (c) 2011-2023 The Bootstrap Authors. Licensed under The MIT License (MIT).\n*/}}\n\n{{ $error := false -}}\n\n{{/* Initialize arguments */}}\n{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"example\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") -}}\n{{- if or $args.err $args.warnmsg -}}\n    {{- partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\"  \"shortcodes/example-bookshop.html\" \n        \"warnid\"   \"warn-invalid-arguments\"\n        \"msg\"      \"Invalid arguments\"\n        \"details\"  ($args.errmsg | append $args.warnmsg)\n        \"file\"     page.File\n        \"position\" .Position\n    )}}\n    {{ $error = $args.err }}\n{{- end -}}\n\n{{/* Initialize local arguments */}}\n{{- $lang := $args.lang -}}\n{{- $showPreview := $args.showPreview }}\n{{- $showMarkup := $args.showMarkup }}\n{{- if eq $lang \"hugo\" }}{{ $lang = \"markdown\" }}{{ end -}}\n{{- $content := .InnerDeindent -}}\n{{- $padding := partial \"utilities/GetPadding.html\" -}}\n{{- $sectionClass := printf \"p-1 px-md-%d py-md-%d\" $padding.x $padding.y -}}\n{{- $bgClass := printf \"m-n1 mx-md-n%d my-md-n%d\" $padding.x $padding.y -}}\n\n{{- $data := \"\" -}}\n{{- $partial := \"\" -}}\n{{- $type := \"shortcode\" }}\n{{- if eq $lang \"hugo\" }}{{ $lang = \"markdown\" }}{{ end -}}\n{{- if eq $lang \"bookshop\" }}\n    {{ $type = \"bookshop\" }}\n    {{ $frontmatter := slice \"yml\" \"yaml\" \"toml\" \"json\" }}\n    {{ $inputRE := findRESubmatch `\\x60\\x60\\x60(?:yml|yaml|json|toml)(\\r\\n|\\r|\\n)([\\s\\S]*?)\\x60\\x60\\x60` $content 1 }}\n    {{ if and $inputRE (eq (len (index $inputRE 0)) 3) }}\n        {{ $lang = (trim (index (split $content \"\\n\") 2) \"\\x60\") | default \"yml\" }}\n        {{ $content = index (index $inputRE 0) 2 }}\n        {{ $data = index (unmarshal $content) 0 }}\n        {{ $data = merge $data (dict \"section_class\" $sectionClass \"bg_class\" $bgClass) }}\n        {{ $component_name := (index $data \"_bookshop_name\") }}\n        {{ if not $component_name }}\n            {{ errorf \"Expected '_bookshop_name': %s\" .Position -}}\n            {{ $error = true }}\n        {{ else }}\n            {{ $partial = partial \"_bookshop/helpers/component.html\" (slice $component_name $data) }}\n        {{ end }}\n    {{ else }}\n        {{ errorf \"Expected frontmatter codeblock as input: %s\" .Position -}}\n        {{ $error = true }}\n    {{ end }}\n{{ end -}}\n\n{{/* Main code */}}\n{{ if not $error }}\n    <div class=\"example-bookshop rounded border mb-3\">\n        {{- if eq $showPreview true -}}\n            <div {{ with $args.id }}id=\"{{ . }}\"{{ end }} class=\"rounded-top p-3 {{ with $args.class }} {{ . }}{{ end }}\">\n                {{ if eq $type \"bookshop\" }}\n                    {{ $partial | safeHTML }}\n                {{ else }}\n                    {{- $content | .Page.RenderString | safeHTML -}}\n                {{ end }}\n            </div>\n        {{- end -}}\n        {{- if eq $showMarkup true -}}\n            <div class=\"d-flex align-items-center ps-3 pe-3 py-1{{ if $showPreview }} border-top{{ else }} rounded-top{{ end }} border-bottom syntax-highlight\">\n                <small class=\"font-monospace text-body text-uppercase\">{{ $lang }}</small>\n            </div>\n            <div class=\"rounded-bottom syntax-highlight border-none\">\n                {{- highlight (trim $content \"\\r\\n\") $lang \"\" | safeHTML -}}\n            </div>\n        {{- end -}}\n    </div>\n{{ end }}\n"
  },
  {
    "path": "layouts/_shortcodes/example-bookshop.md",
    "content": "{{ .Inner -}}\n"
  },
  {
    "path": "layouts/_shortcodes/example.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n\n    This source code adapts the original embedded shortcode as maintained by the The Bootstrap Authors. It introduces\n    the following modifications:\n     - Added validation of shortcode arguments\n     - Modified the layout\n    \n    The original source code is available on:\n    Source: https://github.com/twbs/bootstrap/blob/main/site/layouts/shortcodes/example.html\n    Copyright (c) 2011-2023 The Bootstrap Authors. Licensed under The MIT License (MIT).\n*/}}\n\n{{/* Initialize arguments */}}\n{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"example\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") -}}\n{{- if or $args.err $args.warnmsg -}}\n    {{- partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\"  \"shortcodes/example.html\" \n        \"warnid\"   \"warn-invalid-arguments\"\n        \"msg\"      \"Invalid arguments\"\n        \"details\"  ($args.errmsg | append $args.warnmsg)\n        \"file\"     page.File\n        \"position\" .Position\n    )}}\n{{- end -}}\n\n{{/* Initialize arguments */}}\n{{- $lang := $args.lang -}}\n{{- $showPreview := $args.showPreview }}\n{{- $showMarkup := $args.showMarkup }}\n{{- if eq $lang \"hugo\" }}{{ $lang = \"markdown\" }}{{ end -}}\n{{- $content := .InnerDeindent -}}\n\n{{/* Main code */}}\n{{ if not $args.err }}\n    <div class=\"border {{ if and $showPreview $showMarkup }}rounded mb-3{{ else if $showPreview }}rounded-top border-bottom-0{{ else }}rounded-bottom{{ end }}\">\n        {{- if $showPreview -}}\n            <div {{ with $args.id }}id=\"{{ . }}\"{{ end }} class=\"p-5 {{ if $showMarkup }}rounded-top{{ end }} {{ with $args.class }} {{ . }}{{ end }}\">\n                {{- if eq $lang \"html\" -}}\n                    {{- $content | safeHTML -}}\n                {{- else -}}\n                    {{- $content | .Page.RenderString | safeHTML -}}\n                {{- end -}}\n            </div>\n        {{- end -}}\n        {{- if $showMarkup -}}\n            <div class=\"d-flex align-items-center ps-3 pe-3 py-1{{ if $showPreview }} border-top{{ else }} rounded-top{{ end }} border-bottom syntax-highlight\">\n                <small class=\"font-monospace text-body text-uppercase\">{{- $lang -}}</small>\n            </div>\n            <div class=\"rounded-bottom syntax-highlight border-none\">\n                {{- highlight (trim $content \"\\r\\n\") $lang \"\" | safeHTML -}}\n            </div>\n        {{- end -}}\n    </div>\n{{ end }}\n"
  },
  {
    "path": "layouts/_shortcodes/example.md",
    "content": "{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"example\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") -}}\n{{- if not $args.err -}}\n{{- $lang := $args.lang -}}\n{{- if eq $lang \"hugo\" -}}{{- $lang = \"markdown\" -}}{{- end -}}\n{{- printf \"```%s\\n%s\\n```\" $lang (trim .InnerDeindent \"\\r\\n\") -}}\n{{- end -}}\n"
  },
  {
    "path": "layouts/_shortcodes/file.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n\n    This source code adapts the original embedded shortcode as maintained by the The Bootstrap Authors. It introduces\n    the following modifications:\n     - Added validation of shortcode arguments\n     - Modified the layout\n    \n    The original source code is available on:\n    Source: https://github.com/twbs/bootstrap/blob/main/site/layouts/shortcodes/scss-docs.html\n    Copyright (c) 2011-2023 The Bootstrap Authors. Licensed under The MIT License (MIT).\n*/}}\n\n{{ $error := false -}}\n\n{{/* Initialize arguments */}}\n{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"file\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") -}}\n{{- if or $args.err $args.warnmsg -}}\n    {{- partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\"  \"shortcodes/file.html\" \n        \"warnid\"   \"warn-invalid-arguments\"\n        \"msg\"      \"Invalid arguments\"\n        \"details\"  ($args.errmsg | append $args.warnmsg)\n        \"file\"     page.File\n        \"position\" .Position\n    )}}\n    {{ $error = $args.err }}\n{{- end -}}\n\n{{/* Initialize arguments */}}\n{{- $basePath := .Site.Params.docs.basePath -}}\n{{- $file := or $args.file $args.path -}}\n{{ if $file }}\n    {{- if hasPrefix $file \"./\" -}}\n        {{- $file = path.Clean $file -}}\n    {{- else -}}\n        {{- $file = path.Join $basePath (path.Clean $file) -}}\n    {{- end -}}\n\n    {{ if not (fileExists $file) }}\n        {{ warnf \"Cannot find file: '%q'. See %s\" $file $.Position }}\n        {{ $error = true }}\n    {{ end }}\n{{ else }}\n    {{ errorf \"Expected file or path argument. See %s\" $.Position }}\n    {{ $error = true }}\n{{ end }}\n\n{{- $extension := strings.TrimLeft \".\" (path.Ext $file)  }}\n{{- $lang := $args.lang | default $extension -}}\n{{- $id := $args.id | default (printf \"file-collapse-%d\" .Ordinal) -}}\n\n{{/* Main code */}}\n{{- if not $error -}}\n    {{- /* Force-check if the file exists */ -}}\n    {{- $tmp := os.Stat $file -}}\n    {{- $content := readFile $file -}}\n\n    <div class=\"file\">\n        <ul class=\"file-controls nav nav-tabs{{ with $args.class }} {{ . }}{{ end }}\">\n            <li class=\"nav-item\">\n                <a class=\"nav-link active font-monospace\" \n                    href=\"#body-{{ $id }}\" \n                    aria-current=\"page\" \n                    data-bs-toggle=\"collapse\" \n                    data-bs-target=\".multi-{{ $id }}\" \n                    aria-expanded=\"false\" \n                    aria-controls=\"body-{{ $id }} footer-{{ $id }}\">\n                    <small>{{ if $args.full }}{{ strings.TrimPrefix $basePath $file }}{{ else }}{{ path.Base $file }}{{ end }}</small>\n                </a>\n            </li>\n        </ul>\n        <div class=\"file-panel mb-3\">\n            <div class=\"collapse multi-{{ $id }}{{ if $args.show }} show{{ end }} syntax-highlight\" id=\"body-{{ $id }}\">\n                {{- highlight (trim $content \"\\r\\n\") $lang (or $args.highlightOptions $args.options) -}}\n            </div>\n            <div class=\"collapse multi-{{ $id }}{{ if not $args.show }} show{{ end }} p-3\" id=\"footer-{{ $id }}\">\n                <a class=\"nav-link active\" \n                    href=\"#body-{{ $id }}\" \n                    aria-current=\"page\" \n                    data-bs-toggle=\"collapse\" \n                    data-bs-target=\".multi-{{ $id }}\" \n                    aria-expanded=\"false\" \n                    aria-controls=\"body-{{ $id }} footer-{{ $id }}\">\n                    <small><i>{{ T \"clickToExpand\" }}</i></small>\n                </a>\n            </div>\n        </div>\n    </div>\n{{- end -}}"
  },
  {
    "path": "layouts/_shortcodes/file.md",
    "content": "{{- $error := false -}}\n{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"file\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") -}}\n{{- if $args.err -}}{{- $error = true -}}{{- end -}}\n{{- if not $error -}}\n{{- $basePath := .Site.Params.docs.basePath -}}\n{{- $file := or $args.file $args.path -}}\n{{- if $file -}}\n{{- if hasPrefix $file \"./\" -}}{{- $file = path.Clean $file -}}{{- else -}}{{- $file = path.Join $basePath (path.Clean $file) -}}{{- end -}}\n{{- if fileExists $file -}}\n{{- $extension := strings.TrimLeft \".\" (path.Ext $file) -}}\n{{- $lang := $args.lang | default $extension -}}\n{{- $content := readFile $file -}}\n{{- printf \"```%s\\n%s\\n```\" $lang (trim $content \"\\r\\n\") -}}\n{{- end -}}\n{{- end -}}\n{{- end -}}\n"
  },
  {
    "path": "layouts/_shortcodes/image.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{ $error := false }}\n\n{{/* Initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"image\" \"child\" \"nav-item\" \"args\" .Params \"group\" \"shortcode\" \"named\" .IsNamedParams) }}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\"  \"shortcodes/image.html\" \n        \"warnid\"   \"warn-invalid-arguments\"\n        \"msg\"      \"Invalid arguments\"\n        \"details\"  ($args.errmsg | append $args.warnmsg)\n        \"file\"     page.File\n        \"position\" .Position\n    )}}\n    {{ $error = $args.err }}\n{{- end -}}\n\n{{/* Initialize arguments */}}\n{{- $src := or $args.src $args.url -}}\n{{ if not $src }}\n    {{ errorf \"Missing value for param 'src': %s\" .Position -}}\n    {{- $error = true -}}\n{{ end }}\n\n{{/* Main code */}}\n{{- if not $error -}}\n    {{- partial \"assets/image.html\" (dict \n        \"src\"      $src\n        \"ratio\"    $args.ratio\n        \"wrapper\"  $args.wrapper\n        \"class\"    $args.class\n        \"title\"    $args.title\n        \"caption\"  $args.caption\n        \"figclass\" $args.figclass\n        \"mode\"     $args.mode\n        \"portrait\" $args.portrait\n        \"plain\"    $args.plain\n        \"anchor\"   $args.anchor\n        \"loading\"  $args.loading\n        \"page\"     .Page\n        \"_default\" $args.default\n    ) -}} \n{{- end -}}\n"
  },
  {
    "path": "layouts/_shortcodes/image.md",
    "content": "{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"image\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") -}}\n{{- if not $args.err -}}\n{{- $src := or $args.src $args.url -}}\n{{- $alt := or $args.title $args.caption \"image\" -}}\n![{{ $alt }}]({{ $src }})\n{{- end -}}\n"
  },
  {
    "path": "layouts/_shortcodes/img.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{/* Initialize arguments */}}\n{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"carousel-item\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") -}}\n{{- if or $args.err $args.warnmsg -}}\n    {{- partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\"  \"shortcodes/carousel-item.html\" \n        \"warnid\"   \"warn-invalid-arguments\"\n        \"msg\"      \"Invalid arguments\"\n        \"details\"  ($args.errmsg | append $args.warnmsg)\n        \"file\"     page.File\n        \"position\" .Position\n    )}}\n{{- end -}}\n\n{{/* Initialize local arguments */}}\n{{ if not .Parent }}\n    {{ errorf \"The img shortcode should be contained within a carousel shortcode: %s\" .Position }}\n{{ else if not $args.err }}\n    {{- $ratio := partial \"utilities/GetArgParent\" (dict \"page\" . \"arg\" \"ratio\") -}}\n    {{- $portrait := partial \"utilities/GetArgParent\" (dict \"page\" . \"arg\" \"portrait\") | default false -}}\n\n    {{/* Main code */}}\n    {{- $output := partial \"assets/carousel-item.html\" (dict\n        \"page\"     .Page\n        \"active\"   (or $args.active (eq .Ordinal 0))\n        \"src\"      $args.src\n        \"caption\"  $args.caption\n        \"ratio\"    $ratio\n        \"portrait\" $portrait   \n        \"loading\"  $args.loading\n    ) }}\n\n    {{ $current := .Parent.Scratch.Get \"inner\" }}\n    {{ if $current }}\n        {{ .Parent.Scratch.Set \"inner\" (print $current $output) }}\n    {{ else }}\n        {{ .Parent.Scratch.Set \"inner\" $output }}\n    {{ end }}    \n{{ end -}}\n"
  },
  {
    "path": "layouts/_shortcodes/img.md",
    "content": "{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"carousel-item\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") -}}\n{{- if not $args.err -}}\n![{{ $args.caption | default \"image\" }}]({{ $args.src }})\n{{- end -}}\n"
  },
  {
    "path": "layouts/_shortcodes/ins.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{ $error := false -}}\n\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"ins\" \"args\" .Params) }}\n{{ if $args.err }}\n    {{ partial \"utilities/LogErr.html\" (dict \n        \"partial\"  \"shortcodes/ins.html\" \n        \"warnid\"   \"warn-invalid-arguments\"\n        \"msg\"      \"Invalid arguments\"\n        \"details\"  $args.errmsg\n        \"file\"     page.File\n    )}}\n{{ end }}\n\n{{ $text := .Inner | default \"\" }}\n\n{{/* Main code */}}\n{{- if not $error -}}\n    <ins>{{ $text | strings.TrimSpace | .Page.RenderString }}</ins>\n{{- end -}}"
  },
  {
    "path": "layouts/_shortcodes/ins.md",
    "content": "{{ trim .Inner \" \\r\\n\" | plainify -}}\n"
  },
  {
    "path": "layouts/_shortcodes/kbd.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{- $error := false -}}\n\n{{/* Initialize arguments */}}\n{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"kbd\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") -}}\n{{- if or $args.err $args.warnmsg -}}\n    {{- partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\"  \"shortcodes/kbd.html\" \n        \"warnid\"   \"warn-invalid-arguments\"\n        \"msg\"      \"Invalid arguments\"\n        \"details\"  ($args.errmsg | append $args.warnmsg)\n        \"file\"     page.File\n        \"position\" .Position\n    ) -}}\n    {{- $error = $args.err -}}\n{{- end -}}\n\n{{/* Initialize local arguments */}}\n{{- $text := trim (or $args.text $args.title) \" \\n\\r\" }}\n{{- if not $text -}}\n    {{- partial \"utilities/LogErr.html\" (dict \n        \"partial\"  \"shortcodes/kbd.html\" \n        \"msg\"      \"Invalid arguments\"\n        \"details\"  (slice \"argument 'text': expected value\")\n        \"file\"     page.File\n        \"position\" .Position\n    ) -}}\n    {{- $error = true -}}\n{{- end -}}\n\n{{/* Main code */}}\n{{- if not $error }}\n    <kbd {{ if or $args.color $args.class }}class=\"{{ with $args.color }}text-bg-{{ . }} {{ end }}{{ $args.class }}\"{{ end }}>\n        {{- $text -}}\n    </kbd>\n{{ end -}}\n"
  },
  {
    "path": "layouts/_shortcodes/kbd.md",
    "content": "{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"kbd\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") -}}\n{{- if not $args.err -}}\n`{{ trim .Inner \" \\r\\n\" }}`\n{{- end -}}\n"
  },
  {
    "path": "layouts/_shortcodes/link.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{/* Initialize arguments */}}\n{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"link\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") -}}\n{{- if or $args.err $args.warnmsg -}}\n    {{- partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\"  \"shortcodes/link.html\" \n        \"warnid\"   \"warn-invalid-arguments\"\n        \"msg\"      \"Invalid arguments\"\n        \"details\"  ($args.errmsg | append $args.warnmsg)\n        \"file\"     page.File\n        \"position\" .Position\n    ) -}}\n{{- end -}}\n\n{{/* Initialize arguments */}}\n{{- $destination := or $args.href $args.name $args.url -}}\n{{- $text := chomp .Inner -}}\n{{- if and site.Params.main.titleCase (not .Page.Params.exact) }}{{ $text = title $text }}{{ end -}}\n{{- $text = $text | .Page.RenderString | safeHTML -}}\n\n{{/* Main code */}}\n{{- if not $args.err -}}\n    {{ partial \"assets/link.html\" (dict\n        \"href\"            $destination\n        \"text\"            $text\n        \"cue\"             $args.cue\n        \"tab\"             $args.tab\n        \"case\"            $args.case\n        \"exact\"           $args.exact\n        \"title\"           $args.title\n        \"external\"        $args.external\n        \"force\"           $args.force\n        \"class\"           $args.class\n        \"page\"            .Page\n        \"position\"        .Position\n        \"_default\"        $args.default\n    ) }}\n{{- end -}}\n"
  },
  {
    "path": "layouts/_shortcodes/link.md",
    "content": "{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"link\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") -}}\n{{- if not $args.err -}}\n{{- $destination := or $args.href $args.name $args.url -}}\n{{- $text := chomp .Inner | plainify -}}\n[{{ $text }}]({{ $destination }})\n{{- end -}}\n"
  },
  {
    "path": "layouts/_shortcodes/mark.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{/* Initialize arguments */}}\n{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"mark\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") -}}\n{{- if or $args.err $args.warnmsg -}}\n    {{- partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\"  \"shortcodes/mark.html\" \n        \"warnid\"   \"warn-invalid-arguments\"\n        \"msg\"      \"Invalid arguments\"\n        \"details\"  ($args.errmsg | append $args.warnmsg)\n        \"file\"     page.File\n        \"position\" .Position\n    )}}\n{{- end -}}\n\n{{/* Initialize local arguments */}}\n{{- $class := $args.class -}}\n{{- if $args.color }}{{ $class = printf \"%s text-bg-%s\" $class $args.color }}{{ end -}}\n\n{{/* Main code */}}\n{{- if not $args.error -}}\n    <mark{{ with $class }} class=\"{{ . }}\"{{ end }}>{{ trim .Inner \" \\r\\n\" | .Page.RenderString -}}</mark>\n{{- end -}}"
  },
  {
    "path": "layouts/_shortcodes/mark.md",
    "content": "{{ trim .Inner \" \\r\\n\" | plainify -}}\n"
  },
  {
    "path": "layouts/_shortcodes/nav-item.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{/* Initialize arguments */}}\n{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"nav-item\" \"args\" .Params \"group\" \"shortcode\" \"named\" .IsNamedParams) -}}\n{{- if or $args.err $args.warnmsg -}}\n    {{- partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\"  \"shortcodes/nav-item.html\" \n        \"warnid\"   \"warn-invalid-arguments\"\n        \"msg\"      \"Invalid arguments\"\n        \"details\"  ($args.errmsg | append $args.warnmsg)\n        \"file\"     page.File\n        \"position\" .Position\n    ) -}}\n{{- end -}}\n\n{{/* Initialize arguments */}}\n{{- if not .Parent -}}\n    {{- errorf \"The nav-item shortcode should be contained within a nav shortcode: %s\" .Position -}}\n{{- else if not $args.err -}}\n    {{- $id := .Ordinal -}}\n    {{- $parent := printf \"nav-%d\" .Parent.Ordinal -}}\n    {{- with (.Parent.Get \"id\") }}{{ $parent = . }}{{ end -}}\n\n    {{- $fade := $args.fade -}}\n    {{- $parentFade := false }}\n    {{- if isset .Parent.Params \"fade\" }}{{ $parentFade = partial \"utilities/CastBool.html\" (.Parent.Get \"fade\") }}{{ end -}}\n    {{- $fade = or $fade $parentFade -}}\n    {{- $title := or $args.title $args.header -}}\n    {{- $itemID := printf \"%s-btn-%d\" $parent $id }}\n    {{- $disabledID := cond $args.disabled $itemID \"\" }}\n    {{- $body := trim .Inner \" \\r\\n\" -}}\n    {{- $current := \"\" -}}\n\n    {{/* Main code */}}\n    {{- $output := partial \"assets/nav-item.html\" (dict \n        \"page\"      .Page\n        \"id\"        $id\n        \"parent-id\" $parent\n        \"fade\"      $fade\n        \"title\"     $title\n        \"class\"     $args.class\n        \"body\"      $body\n        \"show\"      $args.show\n        \"disabled\"  $args.disabled\n        \"_default\"  $args.default\n        )\n    -}}\n\n    {{- $current := .Parent.Scratch.Get \"inner\" -}}\n    {{- $titles := .Parent.Scratch.Get \"inner-title\" -}}\n    {{- $disabled := .Parent.Scratch.Get \"inner-disabled\" -}}\n    {{- $icons := .Parent.Scratch.Get \"inner-icon\" -}}\n    {{- $itemAttrs := .Parent.Scratch.Get \"inner-attrs\" -}}\n    {{- if $args.show }}{{ .Parent.Scratch.Set \"inner-show\" $itemID }}{{ end -}}\n    {{- if $current -}}\n        {{- .Parent.Scratch.Set \"inner\" (print $current $output) -}}\n        {{- .Parent.Scratch.Set \"inner-title\" ($titles | append $title) -}}\n        {{- .Parent.Scratch.Set \"inner-disabled\" ($disabled | append $disabledID) -}}\n        {{- .Parent.Scratch.Set \"inner-icon\" ($icons | append $args.icon) -}}\n        {{- .Parent.Scratch.Set \"inner-attrs\" ($itemAttrs | append $args.attributes) -}}\n    {{- else -}}\n        {{- .Parent.Scratch.Set \"inner\" $output -}}\n        {{- .Parent.Scratch.Set \"inner-title\" (slice $title) -}}\n        {{- .Parent.Scratch.Set \"inner-disabled\" (slice $disabledID) -}}\n        {{- .Parent.Scratch.Set \"inner-icon\" (slice $args.icon) -}}\n        {{- .Parent.Scratch.Set \"inner-attrs\" (slice $args.attributes) -}}\n    {{- end }}\n\n    {{- $alternative := partial \"assets/nav-item.html\" (dict \n        \"page\"         .Page\n        \"id\"           $id\n        \"parent-id\"    $parent\n        \"fade\"         $fade\n        \"title\"        $title\n        \"class\"        $args.class\n        \"body\"         $body\n        \"show\"         $args.show\n        \"disabled\"     $args.disabled\n        \"navitem-type\" \"accordion\"\n        \"_default\"     $args.default\n        )\n    -}}\n\n    {{- $current := .Parent.Scratch.Get \"alternative\" -}}\n    {{- if $current -}}\n        {{- .Parent.Scratch.Set \"alternative\" (print $current $alternative) -}}\n    {{- else -}}\n        {{- .Parent.Scratch.Set \"alternative\" $alternative -}}\n    {{ end }}\n{{ end }}\n"
  },
  {
    "path": "layouts/_shortcodes/nav-item.md",
    "content": "{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"nav-item\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") -}}\n{{- if not $args.err -}}\n{{- $title := or $args.title $args.header -}}\n{{ with $title }}### {{ . }}\n\n{{ end -}}\n{{ trim .Inner \" \\r\\n\" }}\n{{- end -}}\n"
  },
  {
    "path": "layouts/_shortcodes/nav.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{/* Initialize arguments */}}\n{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"nav\" \"args\" .Params \"group\" \"shortcode\" \"named\" .IsNamedParams) -}}\n{{- if or $args.err $args.warnmsg -}}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\"  \"shortcodes/nav.html\" \n        \"warnid\"   \"warn-invalid-arguments\"\n        \"msg\"      \"Invalid arguments\"\n        \"details\"  ($args.errmsg | append $args.warnmsg)\n        \"file\"     page.File\n        \"position\" .Position\n    ) -}}\n{{- end -}}\n\n{{- $inner := .Scratch.Get \"inner\" -}}\n{{- $innerTitles := .Scratch.Get \"inner-title\" -}}\n{{- $innerDisabled := .Scratch.Get \"inner-disabled\" -}}\n{{- $innerShow := .Scratch.Get \"inner-show\" -}}\n{{- $innerIcons := .Scratch.Get \"inner-icon\" -}}\n{{- $innerAttrs := .Scratch.Get \"inner-attrs\" -}}\n{{- $input := trim .Inner \" \\r\\n\" -}}\n{{- if $input -}}\n    {{- $input = replace $input \"\\n\" \"\\n  \" -}}\n    {{- warnf \"Unexpected inner content: %s\\r\\n      %s\" .Position $input -}}\n{{- end -}}\n\n{{/* Main code */}}\n{{- if not $args.err -}}\n    {{- partial \"assets/nav.html\" (dict\n        \"id\"                (or $args.id (printf \"nav-%d\" .Ordinal))\n        \"page\"              .Page\n        \"list\"              $args.list\n        \"nav-items\"         $inner\n        \"nav-titles\"        $innerTitles\n        \"nav-disabled\"      $innerDisabled\n        \"nav-show\"          $innerShow\n        \"nav-icons\"         $innerIcons\n        \"nav-item-attrs\"    $innerAttrs\n        \"tab-type\"          (or $args.tabType $args.type)\n        \"align\"             $args.align\n        \"controls-placement\" $args.controlsPlacement\n        \"attributes\"        $args.attributes\n        \"vertical\"          $args.vertical\n        \"word-wrap\"         $args.wordWrap\n        \"responsive\"        $args.responsive\n        \"class\"             $args.class\n        \"pane\"              $args.pane\n        \"width\"             $args.width\n        \"_default\"          $args.default\n        )\n    -}}\n{{- end -}}"
  },
  {
    "path": "layouts/_shortcodes/nav.md",
    "content": "{{ .Inner -}}\n"
  },
  {
    "path": "layouts/_shortcodes/navbar.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{ $error := false }}\n\n{{/* Initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"navbar\" \"args\" .Params \"group\" \"shortcode\" \"named\" .IsNamedParams) }}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\"  \"shortcodes/navbar.html\" \n        \"warnid\"   \"warn-invalid-arguments\"\n        \"msg\"      \"Invalid arguments\"\n        \"details\"  ($args.errmsg | append $args.warnmsg)\n        \"file\"     page.File\n        \"position\" .Position\n    )}}\n    {{ $error := $args.err }}\n{{- end -}}\n\n{{/* Initialize arguments */}}\n{{- $id := $args.id | default (printf \"navbar-collapse-%d\" (add .Ordinal 1)) -}}\n{{ $page := .Page }}\n{{ if $args.path }}{{ $page = .Site.GetPage $args.path }}{{ end }}\n{{ if and $args.path (not $page) }}\n    {{ errorf \"Cannot find page '%s': %s\" $args.path .Position -}}\n    {{ $error = true -}}\n{{ end }}\n\n{{/* Main code */}}\n{{ if not $error -}}\n    {{- partial \"assets/navbar.html\" (dict \n        \"id\"          $id \n        \"page\"        $page\n        \"breakpoint\"  (or $args.breakpoint $args.size)\n        \"style\"       $args.style\n        \"color\"       $args.color\n        \"search\"      $args.search\n        \"mode\"        $args.mode\n        \"menu\"        (or $args.menu $args.menus)\n        \"logo\"        $args.logo\n        \"logo-align\"  $args.logoAlign\n        \"logo-mode\"   $args.logoMode\n        \"title\"       $args.title\n        \"transparent\" $args.transparent\n        \"class\"       $args.class\n        \"_default\"    $args.default\n        )\n    -}}\n{{ end -}}"
  },
  {
    "path": "layouts/_shortcodes/navbar.md",
    "content": "{{- /* Navbar is decorative — no meaningful output for LLM */ -}}\n"
  },
  {
    "path": "layouts/_shortcodes/persona.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{- $error := false }}\n\n{{/* Initialize arguments */}}\n{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"persona\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") -}}\n{{- if or $args.err $args.warnmsg -}}\n    {{- partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\"  \"shortcodes/persona.html\" \n        \"warnid\"   \"warn-invalid-arguments\"\n        \"msg\"      \"Invalid arguments\"\n        \"details\"  ($args.errmsg | append $args.warnmsg)\n        \"file\"     page.File\n        \"position\" .Position\n    )}}\n    {{ $error = $args.err }}\n{{- end -}}\n\n{{/* Initialize local arguments */}}\n{{ if $args.path }}\n    {{- if not .Site.GetPage $args.path -}}\n        {{- errorf \"Invalid or missing value for param 'path': %s\" .Position -}}\n        {{- $error = true -}}\n    {{- end -}}\n{{ end }}\n{{- $content := trim .Inner \" \\r\\n\" | .Page.RenderString -}}\n\n{{/* Main code */}}\n{{- if not $error -}}\n    {{- partial \"assets/persona.html\" (dict \n        \"path\"      $args.path \n        \"class\"     $args.class \n        \"color\"     $args.color\n        \"title\"     $args.title\n        \"href\"      $args.href\n        \"content\"   $content\n        \"thumbnail\" $args.thumbnail\n        \"_default\"  $args.default\n    ) -}}\n{{- end -}}\n"
  },
  {
    "path": "layouts/_shortcodes/persona.md",
    "content": "{{ .Inner -}}\n"
  },
  {
    "path": "layouts/_shortcodes/release.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{/* Initialize arguments */}}\n{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"release\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") -}}\n{{- if or $args.err $args.warnmsg -}}\n    {{- partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\"  \"shortcodes/release.html\" \n        \"warnid\"   \"warn-invalid-arguments\"\n        \"msg\"      \"Invalid arguments\"\n        \"details\"  ($args.errmsg | append $args.warnmsg)\n        \"file\"     page.File\n        \"position\" .Position\n    )}}\n{{- end -}}\n\n{{/* Initialize local arguments */}}\n{{- $title := $args.version -}}\n{{- $state := or $args.releaseState $args.state -}}\n{{- $color := cond (eq $state \"deprecated\") \"secondary\" \"primary\" -}}\n{{- $linkType := or $args.linkType $args.type -}}\n{{- $release := partial \"utilities/GetThemeIcon.html\" (dict \"id\" \"release\" \"default\" dict) -}}\n\n{{- $icon := \"\" -}}\n{{- $tooltip := \"\" -}}\n{{- if eq $state \"deprecated\" -}}\n    {{- if $args.short -}}\n        {{- $icon = ($release.deprecated | default \"fas trash-can\") -}}\n        {{- $tooltip = T \"deprecatedFeature\" $args.version -}}\n    {{ else }}\n        {{- $title = T \"deprecatedFeature\" $args.version -}}\n    {{- end -}}\n{{- else -}}\n    {{- if $args.short -}}\n        {{- $icon = ($release.feature | default \"fas rocket\") -}}\n        {{- $tooltip = T \"addedFeature\" $args.version -}}\n    {{ else }}\n        {{- $title = T \"addedFeature\" $args.version -}}\n    {{- end -}}\n{{- end -}}\n\n{{- if not $args.short -}}\n    {{- if eq $state \"deprecated\" -}}\n        {{- $title = T \"deprecatedFeature\" $args.version -}}\n    {{- else -}}\n        {{- $title = T \"addedFeature\" $args.version -}}\n    {{- end -}}\n{{- end -}}\n\n{{/* Main code */}}\n{{- if not $args.error -}}\n    {{ $href := partial \"utilities/URLJoin.html\" (dict \"base\" site.Params.docs.release \"path\" $args.version) }}\n    {{ if eq $linkType \"link\" }}\n        {{ partial \"assets/link.html\" (dict \"href\" $href \"text\" $title \"page\" .Page) }}\n    {{ else }}\n        {{- if not $args.inline }}<div class=\"pb-3\">{{ end -}}\n        {{- partial \"assets/button.html\" (dict \n            \"title\"       $title\n            \"href\"        $href\n            \"color\"       $color\n            \"outline\"     \"true\"\n            \"button-size\" (or $args.buttonSize $args.size)\n            \"icon\"        $icon\n            \"tooltip\"     $tooltip\n            \"order\"       \"first\"\n            \"class\"       (trim (printf \"rounded-2 fw-semibold %s\" $args.class) \" \")\n            \"spacing\"     $args.inline\n        ) -}} \n        {{- if not $args.inline }}</div>{{ end -}}\n    {{ end }}\n{{- end -}}\n"
  },
  {
    "path": "layouts/_shortcodes/release.md",
    "content": "{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"release\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") -}}\n{{- if not $args.err -}}\n{{- $state := or $args.releaseState $args.state -}}\n{{- if eq $state \"deprecated\" -}}\n{{- T \"deprecatedFeature\" $args.version -}}\n{{- else -}}\n{{- T \"addedFeature\" $args.version -}}\n{{- end -}}\n{{- end -}}\n"
  },
  {
    "path": "layouts/_shortcodes/spinner.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{/* Initialize arguments */}}\n{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"spinner\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") -}}\n{{- if or $args.err $args.warnmsg -}}\n    {{- partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\"  \"shortcodes/spinner.html\" \n        \"warnid\"   \"warn-invalid-arguments\"\n        \"msg\"      \"Invalid arguments\"\n        \"details\"  ($args.errmsg | append $args.warnmsg)\n        \"file\"     page.File\n        \"position\" .Position\n    )}}\n{{- end -}}\n\n{{/* Main code */}}\n{{- if not $args.error -}}\n    {{- with $args.class }}<div class=\"{{ . }}\">{{ end -}}\n        <div class=\"spinner-{{ if $args.grow }}grow{{ else }}border{{ end }} text-{{ $args.color }}\" role=\"status\">\n            <span class=\"visually-hidden\">{{ trim .Inner \" \\r\\n\" | plainify -}}</span>\n        </div>\n    {{- if $args.class }}</div>{{ end -}}\n{{- end -}}"
  },
  {
    "path": "layouts/_shortcodes/spinner.md",
    "content": "{{- /* Spinner is decorative — no meaningful output for LLM */ -}}\n"
  },
  {
    "path": "layouts/_shortcodes/sub.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"sub\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") -}}\n{{- if or $args.err $args.warnmsg -}}\n    {{- partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\"  \"shortcodes/sub.html\" \n        \"warnid\"   \"warn-invalid-arguments\"\n        \"msg\"      \"Invalid arguments\"\n        \"details\"  ($args.errmsg | append $args.warnmsg)\n        \"file\"     page.File\n        \"position\" .Position\n    )}}\n{{- end -}}\n\n{{- if not $args.error -}}\n<sub>{{ $args.text | .Page.RenderString -}}</sub>\n{{- end -}}"
  },
  {
    "path": "layouts/_shortcodes/sub.md",
    "content": "{{ trim .Inner \" \\r\\n\" | plainify -}}\n"
  },
  {
    "path": "layouts/_shortcodes/sup.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"sup\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") -}}\n{{- if or $args.err $args.warnmsg -}}\n    {{- partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\"  \"shortcodes/sup.html\" \n        \"warnid\"   \"warn-invalid-arguments\"\n        \"msg\"      \"Invalid arguments\"\n        \"details\"  ($args.errmsg | append $args.warnmsg)\n        \"file\"     page.File\n        \"position\" .Position\n    )}}\n{{- end -}}\n\n{{- if not $args.error -}}\n<sup>{{ $args.text | .Page.RenderString -}}</sup>\n{{- end -}}"
  },
  {
    "path": "layouts/_shortcodes/sup.md",
    "content": "{{ trim .Inner \" \\r\\n\" | plainify -}}\n"
  },
  {
    "path": "layouts/_shortcodes/table.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{/* Initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"table\" \"args\" .Params \"group\" \"shortcode\" \"named\" .IsNamedParams) }}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\"  \"shortcodes/table.html\" \n        \"warnid\"   \"warn-invalid-arguments\"\n        \"msg\"      \"Invalid arguments\"\n        \"details\"  ($args.errmsg | append $args.warnmsg)\n        \"file\"     page.File\n        \"position\" .Position\n    )}}\n{{- end -}}\n\n{{/* Main code */}}\n{{ if not $args.err }}\n    {{ partial \"assets/table.html\" (dict\n        \"page\"                   .Page\n        \"input\"                  .Inner\n        \"breakpoint\"             $args.breakpoint\n        \"class\"                  $args.class\n        \"sortable\"               $args.sortable\n        \"paginate\"               $args.paginate\n        \"pagination\"             (or $args.pagination $args.pagingOptionPerPage)\n        \"pagination-select\"      (or $args.paginationSelect $args.pagingOptionPageSelect)\n        \"searchable\"             $args.searchable\n        \"wrap\"                   $args.wrap\n        \"wrapper\"                $args.wrapper\n        \"_default\"               $args.default\n    ) }}\n{{ end }}"
  },
  {
    "path": "layouts/_shortcodes/table.md",
    "content": "{{ .Inner -}}\n"
  },
  {
    "path": "layouts/_shortcodes/testimonial.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{ $error := false }}\n\n{{/* Initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"testimonial\"  \"args\" .Params \"group\" \"shortcode\" \"named\" .IsNamedParams) }}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\"  \"shortcodes/testimonial.html\" \n        \"warnid\"   \"warn-invalid-arguments\"\n        \"msg\"      \"Invalid arguments\"\n        \"details\"  ($args.errmsg | append $args.warnmsg)\n        \"file\"     page.File\n        \"position\" .Position\n    )}}\n    {{ $error = $args.err }}\n{{- end -}}\n\n{{/* Initialize arguments */}}\n{{/* Main code */}}\n{{- if not $error -}}\n    <div class=\"testimonial {{ $args.class }}\">\n        {{ $class := \"\" }}\n        {{ with $args.color }}\n            {{ $class = printf \"%s text-bg-%s\" (partial \"utilities/GetBackgroundStyle\" (dict \"background\" .)) . }}\n        {{ end }}\n        {{- partial \"assets/testimonial.html\" (dict \n            \"page\"          .Page\n            \"content\"       .Inner\n            \"logo\"          $args.logo\n            \"icon\"          $args.icon\n            \"icon-style\"    $args.iconStyle\n            \"align\"         $args.align\n            \"contact\"       $args.contact\n            \"role\"          $args.role\n            \"image\"         $args.image\n            \"url\"           $args.url\n            \"padding\"       $args.padding\n            \"orientation\"   $args.orientation\n            \"show-controls\" false\n            \"link\"          $args.link\n            \"color\"         $args.color\n            \"class\"         $class\n        ) -}} \n    </div>\n{{- end -}}\n\n\n"
  },
  {
    "path": "layouts/_shortcodes/testimonial.md",
    "content": "\"{{ trim .Inner \"\\r\\n \" }}\"\n{{ with .Get \"contact\" }}— {{ . }}{{ with $.Get \"role\" }}, {{ . }}{{ end }}{{ with $.Get \"url\" }} ({{ . }}){{ end }}\n{{ end -}}\n"
  },
  {
    "path": "layouts/_shortcodes/timeline.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n\n    Inspired by the timeline snippet from Siddharth Panchal at https://bootsnipp.com/snippets/Q0ppE\n*/}}\n\n{{ $error := false }}\n\n{{/* Initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"timeline\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") }}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\"  \"shortcodes/timeline.html\" \n        \"warnid\"   \"warn-invalid-arguments\"\n        \"msg\"      \"Invalid arguments\"\n        \"details\"  ($args.errmsg | append $args.warnmsg)\n        \"file\"     page.File\n        \"position\" .Position\n    )}}\n    {{ $error = $args.err }}\n{{ end }}\n\n{{/* Initialize local arguments */}}\n{{- $page := .Page -}}\n{{- $data := partial \"utilities/GetI18nData.html\" (dict \"page\" $page \"data\" $args.data) }}\n{{ if and (not $data) (not $args.section) -}}\n    {{ errorf \"Invalid timeline data '%s': %s\" $args.data .Position -}}\n    {{ $error = true }}\n{{ end -}}\n\n{{/* Main code */}}\n{{ if not $error }}\n    {{ partial \"assets/timeline.html\" (dict\n        \"page\"       $page\n        \"data\"       $args.data\n        \"section\"    $args.section\n        \"limit\"      $args.limit\n        \"layout\"     $args.layout\n        \"background\" $args.background\n        \"class\"      $args.class\n        \"justify\"    $args.justify\n        \"_default\"   $args.default\n    ) }}\n{{ end }}"
  },
  {
    "path": "layouts/_shortcodes/timeline.md",
    "content": "{{ .Inner -}}\n"
  },
  {
    "path": "layouts/_shortcodes/toast.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{ $error := false }}\n\n{{/* Initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"toast\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") }}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\"  \"shortcodes/toast.html\" \n        \"warnid\"   \"warn-invalid-arguments\"\n        \"msg\"      \"Invalid arguments\"\n        \"details\"  ($args.errmsg | append $args.warnmsg)\n        \"file\"     page.File\n        \"position\" .Position\n    )}}\n    {{ $error = $args.err }}\n{{ end }}\n\n{{/* Initialize local arguments */}}\n{{- $id := $args.id | default (printf \"toast-message-%d\" .Ordinal) -}}\n{{ $message := trim .Inner \" \\r\\n\" | .Page.RenderString -}}\n\n{{ if not $message -}}\n    {{ errorf \"Missing inner element text: %s\" .Position -}}\n    {{ $error = true }}\n{{ end }}\n    \n{{/* Main code */}}\n{{ if not $error -}}\n    {{ partial \"assets/toast.html\" (dict\n        \"id\" $id\n        \"title\"    (or $args.title $args.header)\n        \"message\"  $message\n        \"class\"    $args.class\n        \"_default\" $args.default\n    ) }}\n{{ end -}}\n"
  },
  {
    "path": "layouts/_shortcodes/toast.md",
    "content": "{{- /* Toast is decorative — no meaningful output for LLM */ -}}\n"
  },
  {
    "path": "layouts/_shortcodes/tooltip.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{ $error := false }}\n\n{{/* Initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"tooltip\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") }}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\"  \"shortcodes/tooltip.html\" \n        \"warnid\"   \"warn-invalid-arguments\"\n        \"msg\"      \"Invalid arguments\"\n        \"details\"  ($args.errmsg | append $args.warnmsg)\n        \"file\"     page.File\n        \"position\" .Position\n    )}}\n    {{ $error = $args.err }}\n{{ end }}\n\n{{/* Initialize local arguments */}}\n{{ $title := trim .Inner \" \\r\\n\" | plainify -}}\n{{ if not $title -}}\n    {{ errorf \"Missing inner element text: %s\" .Position -}}\n    {{ $error = true }}\n{{ end -}}\n\n{{/* Main code */}}\n{{ if not $error }}\n    <div class=\"btn-tooltip d-inline-flex\">\n        {{- partial \"assets/button.html\" (dict \n            \"link-type\" \"link\"\n            \"title\"     $title\n            \"color\"     $args.color\n            \"tooltip\"   $args.title\n            \"href\"      $args.href\n            \"placement\" $args.placement\n            \"class\"     $args.class\n            \"spacing\"   $args.spacing)\n        -}}\n    </div>\n{{ end }}"
  },
  {
    "path": "layouts/_shortcodes/tooltip.md",
    "content": "{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"tooltip\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") -}}\n{{- if not $args.err -}}\n{{ trim .Inner \" \\r\\n\" | plainify -}}\n{{- end -}}\n"
  },
  {
    "path": "layouts/_shortcodes/video.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{/* Initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"video\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") }}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\"  \"shortcodes/video.html\" \n        \"warnid\"   \"warn-invalid-arguments\"\n        \"msg\"      \"Invalid arguments\"\n        \"details\"  ($args.errmsg | append $args.warnmsg)\n        \"file\"     page.File\n        \"position\" .Position\n    )}}\n{{ end }}\n\n{{/* Main code */}}\n{{ if not $args.err }}\n    {{ partial \"assets/video.html\" (dict \n        \"page\"      .Page\n        \"position\"  .Position\n        \"account\"   $args.account\n        \"provider\"  (or $args.host $args.provider)\n        \"media-id\"  (or $args.mediaId $args.id)\n        \"class\"     $args.class \n        \"title\"     $args.title \n        \"autoplay\"  $args.autoplay\n        \"autotitle\" $args.autotitle\n        \"_default\"  $args.default\n    ) }}\n{{ end -}}\n"
  },
  {
    "path": "layouts/_shortcodes/video.md",
    "content": "{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"video\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") -}}\n{{- if not $args.err -}}\n{{- $title := $args.title | default \"Video\" -}}\n{{- $provider := or $args.host $args.provider -}}\n{{- $id := or $args.mediaId $args.id -}}\n[Video: {{ $title }}]{{ with $provider }} ({{ . }}{{ with $id }}: {{ . }}{{ end }}){{ end }}\n{{- end -}}\n"
  },
  {
    "path": "layouts/_shortcodes/vimeo.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{/* Initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"video\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") }}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\"  \"shortcodes/vimeo.html\" \n        \"warnid\"   \"warn-invalid-arguments\"\n        \"msg\"      \"Invalid arguments\"\n        \"details\"  ($args.errmsg | append $args.warnmsg)\n        \"file\"     page.File\n        \"position\" .Position\n    )}}\n{{ end }}\n\n{{/* Main code */}}\n{{ if not $args.err }}\n    {{ partial \"assets/video.html\" (dict \n        \"page\"      .Page\n        \"position\"  .Position\n        \"provider\"  \"vimeo\"\n        \"media-id\"  (or $args.mediaId $args.id)\n        \"class\"     $args.class \n        \"title\"     (or $args.title \"Vimeo Video\")\n        \"autoplay\"  $args.autoplay\n        \"autotitle\" $args.autotitle\n        \"_default\"  $args.default\n    ) }}\n{{ end -}}\n"
  },
  {
    "path": "layouts/_shortcodes/vimeo.md",
    "content": "{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"video\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") -}}\n{{- if not $args.err -}}\n[{{ or $args.title \"Vimeo Video\" }}](https://vimeo.com/{{ or $args.mediaId $args.id }})\n{{- end -}}\n"
  },
  {
    "path": "layouts/_shortcodes/youtube.html",
    "content": "{{/* \n    Copyright © 2022 - 2026 The Hinode Team / Mark Dumay. All rights reserved.\n    Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.\n    Visit gethinode.com/license for more details.\n*/}}\n\n{{/* Initialize arguments */}}\n{{ $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"video\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") }}\n{{ if or $args.err $args.warnmsg }}\n    {{ partial (cond $args.err \"utilities/LogErr.html\" \"utilities/LogWarn.html\") (dict \n        \"partial\"  \"shortcodes/youtube.html\" \n        \"warnid\"   \"warn-invalid-arguments\"\n        \"msg\"      \"Invalid arguments\"\n        \"details\"  ($args.errmsg | append $args.warnmsg)\n        \"file\"     page.File\n        \"position\" .Position\n    )}}\n{{ end }}\n\n{{/* Main code */}}\n{{ if not $args.err }}\n    {{ partial \"assets/video.html\" (dict \n        \"page\"      .Page\n        \"position\"  .Position\n        \"provider\"  \"youtube\"\n        \"media-id\"  (or $args.mediaId $args.id)\n        \"class\"     $args.class \n        \"title\"     (or $args.title \"YouTube Video\")\n        \"autoplay\"  $args.autoplay\n        \"autotitle\" $args.autotitle\n        \"_default\"  $args.default\n    ) }}\n{{ end -}}\n"
  },
  {
    "path": "layouts/_shortcodes/youtube.md",
    "content": "{{- $args := partial \"utilities/InitArgs.html\" (dict \"structure\" \"video\" \"args\" .Params \"named\" .IsNamedParams \"group\" \"shortcode\") -}}\n{{- if not $args.err -}}\n[{{ or $args.title \"YouTube Video\" }}](https://www.youtube.com/watch?v={{ or $args.mediaId $args.id }})\n{{- end -}}\n"
  },
  {
    "path": "layouts/alias.html",
    "content": "{{ $lang := site.Language.Lang }}\n<!DOCTYPE html>\n<html {{ with $lang }}lang=\"{{ . }}\"{{ end }}>\n  <head>\n    <title>{{ .Permalink }}</title>\n    <link rel=\"canonical\" href=\"{{ .Permalink }}\">\n    <meta name=\"robots\" content=\"noindex\">\n    <meta charset=\"utf-8\">\n    <noscript><meta http-equiv=\"refresh\" content=\"0; url={{ .Permalink }}\"></noscript>\n    {{ if and page site.Params.main.enableLanguageSelectionStorage }} \n      {{- partial \"footer/scripts.html\" (dict \"page\" page \"type\" \"critical\") -}}\n      {{- partial \"footer/scripts.html\" (dict \"page\" page \"type\" \"functional\") -}}\n    {{ else }}\n      <script src='{{ partial \"utilities/GetStaticURL\" (dict \"url\" \"js/alias.js\") }}'></script>\n    {{ end }}\n  </head>\n</html>"
  },
  {
    "path": "layouts/baseof.html",
    "content": "{{- /* Set version-aware sidebar menu */ -}}\n{{- $version := partial \"utilities/GetVersion.html\" (dict \"page\" . \"base\" true) -}}\n{{- $.Scratch.Set \"version\" $version -}}\n{{ with partial \"utilities/GetMenu\" (dict \"page\" . \"version\" $version) }}{{ $.Scratch.Set \"sidebar\" . }}{{ end }}\n\n{{- /* Validate if current version is latest */ -}}\n{{- if and site.Params.docs.checkVersion $version -}}\n    {{- if ne $version \"latest\" -}}\n        {{- if partial \"utilities/IsOlder\" (dict \"current\" $version) -}}\n            {{- $.Scratch.Set \"pageAlertMsg\" (T \"newerVersionAlert\" site.Title) -}}\n            {{- $.Scratch.Set \"pageAlertURL\" (or site.Params.docs.latestURL site.baseURL) -}}\n        {{- end -}}\n    {{- end -}}\n{{- end -}}\n\n{{- /* Initialize module configuration */ -}}\n{{- $modules := partialCached \"utilities/InitModules.html\" . -}}\n{{- $.Scratch.Set \"modules\" $modules -}}\n\n{{- $fullCover := or (or (and .IsHome .Site.Params.home.fullCover) .Page.Params.fullCover) .Site.Params.main.footerBelowFold }}\n{{- $.Scratch.Set \"fullCover\" $fullCover -}}\n\n{{- /* Define main breakpoint */ -}}\n{{- $.Scratch.Set \"breakpoint\" (partialCached \"utilities/GetBreakpoint.html\" .) }}\n\n{{- /* Define page metadata */ -}}\n{{- $.Scratch.Set \"metadata\" (partial \"utilities/GetMetadata.html\" .) }}\n\n{{- /* Define page sharing */ -}}\n{{- $.Scratch.Set \"sharing\" (partial \"utilities/GetSharing.html\" .) }}\n\n{{- /* Define TOC inclusion */ -}}\n{{- $.Scratch.Set \"includeToc\" (partial \"utilities/GetIncludeToc.html\" .) }}\n\n{{- /* Prepare content blocks and establish overlay mode */ -}}\n{{ $overlayMode := $.Scratch.Get \"overlayMode\" }}\n\n{{- /* Define base URL */ -}}\n{{ $lang := site.Language.Lang }}\n{{ $.Scratch.Set \"baseURL\" (strings.TrimSuffix (printf \"%s/\" $lang) site.Home.RelPermalink) }}\n\n<!doctype html>\n<html lang=\"{{ .Site.Language.Lang }}\" class=\"no-js\">\n    <head>\n        {{- partial \"footer/scripts.html\" (dict \"page\" . \"type\" \"critical\") -}}\n        {{- partial \"footer/scripts.html\" (dict \"page\" . \"type\" \"functional\") -}}\n        {{ block \"head\" . }}{{ end -}}\n    </head>\n\n    {{- $belowFold := site.Params.main.footerBelowFold -}}\n    {{- $navFixed  := site.Params.navigation.fixed -}}\n    {{- $bodyClasses := slice -}}\n    {{- if $belowFold }}{{ $bodyClasses = $bodyClasses | append \"footer-below-fold\" }}{{ end -}}\n    {{- if $navFixed  }}{{ $bodyClasses = $bodyClasses | append \"navbar-fixed\"      }}{{ end -}}\n    <body{{ with $bodyClasses }} class=\"{{ delimit . \" \" }}\"{{ end }}>\n        {{- partial \"assets/navbar.html\" (dict\n            \"page\"        .\n            \"fixed\"       site.Params.navigation.fixed\n            \"overlay\"     site.Params.navigation.overlay\n            \"overlayMode\" site.Params.navigation.overlayMode\n            \"transparent\" site.Params.navigation.transparent\n            \"color\"       site.Params.navigation.color\n            \"style\"       (default \"light\" site.Params.navigation.style)\n            \"breakpoint\"  (default \"md\" site.Params.navigation.size))\n        -}}\n\n        <main id=\"container\" class=\"main\">\n            {{ block \"main\" . }}{{ end -}}\n        </main>\n        {{ if and (eq .Kind \"page\") (eq (len (or .Params.content_blocks slice)) 0) (eq (len .RawContent) 0)}}\n            {{- partial \"utilities/LogWarn.html\" (dict\n                \"partial\" \"layouts/baseof.html\" \n                \"warnid\"  \"warn-empty-page\"\n                \"msg\"     \"No content\"\n                \"details\" \"Page has no content or blocks defined\"\n                \"file\"    .File\n            ) -}}\n        {{ end }}\n\n        {{- partial \"footer/social.html\" . -}}\n        {{- partial \"footer/footer.html\" . -}}\n        {{- partial \"footer/toast-container.html\" . -}}\n        {{- partial \"assets/symbols.html\" . -}}\n        {{- partial \"assets/modals.html\" . -}}\n        {{- partialCached \"footer/scripts.html\" (dict \"page\" .) -}}\n        {{- partial \"footer/scripts.html\" (dict \"page\" . \"type\" \"optional\") -}}\n    </body>\n</html>\n"
  },
  {
    "path": "layouts/baseof.xml",
    "content": "{{ printf \"<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\" standalone=\\\"yes\\\"?>\" | safeHTML }}\n{{ block \"main\" . }}{{ end }}"
  },
  {
    "path": "layouts/body.html",
    "content": "{{- partial \"page/thumbnail.html\" (dict \"page\" . \"wrapper\" \"mb-5\") -}}\n\n{{ partial \"utilities/ProcessContent\" (dict \"page\" .Page \"raw\" .RawContent) }}\n"
  },
  {
    "path": "layouts/docs/all.html",
    "content": "{{/* Derived from layouts/single.html template, but applied to all docs pages (list and single) */}}\n{{/* Inserts auto-generated sidebar with section navigation */}}\n{{/* Renders blocks inside main body */}}\n{{ define \"main\" -}}\n    {{- $breakpoint := $.Scratch.Get \"breakpoint\" -}}\n    {{- $padding := partial \"utilities/GetPadding.html\" -}}\n    \n    {{/* Auto-generated sidebar for docs */}}\n    {{- $menu := .Scratch.Get \"sidebar\" -}}\n    {{- if not (reflect.IsSlice $menu) }}{{ $menu = \"\" }}{{ end }}\n    {{- $version := .Scratch.Get \"version\" -}}\n    {{- $sidebar := partial \"assets/sidebar.html\" (dict \"page\" . \"menu\" $menu \"version\" $version \"auto-generate\" true) -}}\n\n    {{/* Render the offcanvas sidebar */}}\n    {{- partial \"page/sidebar-offcanvas.html\" (dict \"section\" $.Section \"raw\" $sidebar) -}}\n\n    {{/* Render the page content using responsive columns */}}\n    <div class=\"container-xxl flex-fill py-{{ $padding.y }} px-{{ $padding.x }} px-xxl-0\">\n        <div class=\"row row-cols-1 row-cols-{{ $breakpoint.current }}-2 row-cols-{{ $breakpoint.next }}-3\">\n            <div class=\"col col-{{ $breakpoint.next }}-2 d-none d-{{ $breakpoint.next }}-block sidebar-overflow sticky-top p-0\">\n                {{ $sidebar | safeHTML }}\n            </div>\n            <div class=\"col-12 col-{{ $breakpoint.current }}-9 col-{{ $breakpoint.next }}-8 mb-5\">\n                {{/* Render the defined content blocks, using the default articles element as fallback for list pages */}}\n                {{ if .Params.content_blocks }}\n                    {{- $.Scratch.Set \"blocks_embed\" true -}}\n                    {{- partial \"page/blocks.html\" . -}}\n                {{ else if eq .Kind \"section\" }}\n                    {{ $.Scratch.Set \"articlesParams\" (dict\n                        \"sort\"         \"weight\"\n                        \"reverse\"      false\n                        \"class\"        \"card-emphasize border h-100\"\n                        \"header-style\" \"none\"\n                        \"icon-style\"   \"text-primary fa-xl\"\n                        \"padding\"      $padding.x\n                    ) }}\n                    {{ partial \"page/articles.html\" . }}\n                {{ else }}\n                    {{ .Render \"header\" }}\n                {{ end }}\n\n                {{ .Render \"body\" }}\n                \n                {{ .Render \"footer\" }}\n            </div>\n            <div class=\"col col-{{ $breakpoint.current }}-3 col-{{ $breakpoint.next }}-2 d-none d-{{ $breakpoint.current }}-block\">\n                {{ .Render \"toc\" }}\n            </div>\n        </div>\n    </div>\n{{ end -}}\n"
  },
  {
    "path": "layouts/docs/body.html",
    "content": "{{ partial \"utilities/ProcessContent\" (dict \"page\" .Page \"raw\" .RawContent) }}\n"
  },
  {
    "path": "layouts/docs/footer.html",
    "content": "<div class=\"mt-5 small\">\n    {{ partial \"utilities/git.html\" . }}\n</div>\n"
  },
  {
    "path": "layouts/docs/header.html",
    "content": "{{/* Initialize global variables */}}\n{{- $size := .Site.Params.style.title.size | default 4 -}}\n{{- $headingStyle := .Site.Params.style.title.headingStyle | default \"display\" -}}\n{{- $contentStyle := .Site.Params.style.title.contentStyle | default \"lead text-muted\" -}}\n{{- $padding := partial \"utilities/GetPadding.html\" -}}\n{{- $sharing := .Scratch.Get \"sharing\" -}}\n\n{{/* Initialize local variables */}}\n{{- $breakpoint := .Scratch.Get \"breakpoint\" -}}\n{{ $title := .Title }}\n{{ if and .Site.Params.main.titleCase (not .Params.exact) }}{{ $title = title $title }}{{ end }}\n\n{{/* Render breadcrumb */}}\n{{ if .Site.Params.navigation.breadcrumb }}{{ partial \"assets/breadcrumb.html\" (dict \"page\" .) }}{{ end -}}\n               \n{{/* Display title and metadata */}}\n{{ with $title }}<h1 id=\"{{ anchorize . }}\" class=\"{{ $headingStyle }}-{{ $size }} pt-1\">{{ . }}</h1>{{ end }}\n\n{{/* Ignore metadata */}}\n\n{{/* Ignore tags */}}\n\n{{/* Display social sharing buttons */}}\n{{- if $sharing }}\n    <div class=\"py-3 d-flex align-items-center\">{{ partial \"page/sharing.html\" . }}</div>\n{{ end -}}\n\n{{/* Display description */}}\n{{ with .Description }}\n    <div class=\"{{ $contentStyle }} py-{{ $padding.y }}\">{{ . | $.RenderString | safeHTML }}</div>\n{{ end }}\n\n{{/* Display TOC dropdown on smaller screens */}}\n{{- if and .Site.Params.navigation.toc .Params.includeToc | default true -}}\n    <div class=\"d-{{ $breakpoint.current }}-none pb-5\">{{ partial \"assets/toc-dropdown.html\" (dict \"page\" .) }}</div>\n{{- end -}}\n"
  },
  {
    "path": "layouts/footer.html",
    "content": "{{/* Render previous / next navigation */}}\n{{- partial \"page/navigation.html\" . -}}\n"
  },
  {
    "path": "layouts/form/single.html",
    "content": "{{ define \"main\" }}\n    {{- $padding := partial \"utilities/GetPadding.html\" -}}\n    {{- $formIcon := partial \"utilities/GetThemeIcon.html\" (dict \"id\" \"formSubmittedIcon\" \"default\" \"fa envelope\") -}}\n    <section class=\"container-fluid p-0 section-cover d-flex align-items-center\">\n        <div class=\"container-xxl px-xxl-0 px-{{ $padding.x }} py-0 my-auto h-100\">\n            <div class=\"text-center col-md-6 mx-auto\">\n                <span class=\"text-body fw-bold\">\n                    {{ partial \"assets/icon.html\" (dict \"icon\" $formIcon \"class\" \"fa-10x\") }}\n                    <p class=\"fs-3\">{{ .Title }}</p>\n                </span>\n                <p>\n                    {{ $inner := trim .RawContent \" \\n\\r\" }}\n                    {{ if gt (len $inner) 0 }}\n                        {{ partial \"utilities/ProcessContent\" (dict \"page\" .Page \"raw\" $inner) }}\n                    {{ end }}                     \n                </p>\n            </div>\n        </div>\n    </section>\n{{ end }}\n"
  },
  {
    "path": "layouts/header.html",
    "content": "{{/* Initialize global variables */}}\n{{- $size := .Site.Params.style.title.size | default 4 -}}\n{{- $headingStyle := .Site.Params.style.title.headingStyle | default \"display\" -}}\n{{- $contentStyle := .Site.Params.style.title.contentStyle | default \"lead text-muted\" -}}\n{{- $padding := partial \"utilities/GetPadding.html\" -}}\n{{- $sharing := .Scratch.Get \"sharing\" -}}\n\n{{/* Initialize local variables */}}\n{{- $breakpoint := .Scratch.Get \"breakpoint\" -}}\n{{ $title := .Title }}\n{{ if and .Site.Params.main.titleCase (not .Params.exact) }}{{ $title = title $title }}{{ end }}\n\n{{/* Render breadcrumb */}}\n{{ if .Site.Params.navigation.breadcrumb }}{{ partial \"assets/breadcrumb.html\" (dict \"page\" .) }}{{ end -}}\n               \n{{/* Display title and metadata */}}\n{{ with $title }}<h1 id=\"{{ anchorize . }}\" class=\"{{ $headingStyle }}-{{ $size }} pt-1\">{{ . }}</h1>{{ end }}\n\n{{/* Render metadata */}}\n{{- partial \"page/metadata.html\" . -}}\n\n{{/* Render tags */}}\n{{- partial \"page/tags.html\" . -}}\n\n{{/* Display social sharing buttons */}}\n{{- if $sharing }}\n    <div class=\"py-3 d-flex align-items-center\">{{ partial \"page/sharing.html\" . }}</div>\n{{ end -}}\n\n{{/* Display description */}}\n{{ with .Description }}\n    <div class=\"{{ $contentStyle }} py-{{ $padding.y }}\">{{ . | $.RenderString | safeHTML }}</div>\n{{ end }}\n\n{{/* Display TOC dropdown on smaller screens */}}\n{{- if and .Site.Params.navigation.toc .Params.includeToc | default true -}}\n    <div class=\"d-{{ $breakpoint.current }}-none pb-5\">{{ partial \"assets/toc-dropdown.html\" (dict \"page\" .) }}</div>\n{{- end -}}\n"
  },
  {
    "path": "layouts/index.redir",
    "content": "{{- range .Site.Params.docs.releases -}}\n{{- if .redirect -}}\n{{ urls.JoinPath .url \"/*\" }} {{ urls.JoinPath .redirect \":splat\" }} 200\n{{ end }}\n{{- end -}}\n{{ range $p := .Site.AllPages }}\n{{- range .Aliases -}}\n{{ if hasPrefix . \".\" }}{{ urls.JoinPath $p.RelPermalink . }}{{ else }}{{ . }}{{ end }} {{ $p.RelPermalink }}\n{{ end }}\n{{- end -}}"
  },
  {
    "path": "layouts/list.html",
    "content": "{{ define \"main\" -}}\n    {{- $breakpoint := $.Scratch.Get \"breakpoint\" -}}\n    {{- $padding := partial \"utilities/GetPadding.html\" -}}\n    {{- $content := partial \"utilities/ProcessContent\" (dict \"page\" .Page \"raw\" .RawContent) }}\n\n    <!-- Render the defined content blocks, using the default articles element as fallback -->\n    {{ if .Params.content_blocks }}\n        {{- partial \"page/blocks.html\" . -}}\n    {{ else }}\n        {{ with partial \"page/articles.html\" . }}\n            <div class=\"container-xxl py-{{ $padding.y }} px-xxl-0 px-{{ $padding.x }} py-0 my-auto h-100\">\n                {{ . | safeHTML }}\n            </div>\n        {{ end }}\n    {{ end }}\n\n    <!-- Render the list page content as full width, if any -->\n    {{ with $content }}\n        <div class=\"container-xxl flex-fill py-{{ $padding.y }} px-{{ $padding.x }} px-xxl-0\">\n            {{ . }}\n        </div>\n    {{ end }}\n{{ end -}}\n"
  },
  {
    "path": "layouts/minimal/body.html",
    "content": "{{ partial \"utilities/ProcessContent\" (dict \"page\" .Page \"raw\" .RawContent) }}\n"
  },
  {
    "path": "layouts/minimal/footer.html",
    "content": "{{/* Intentionally left blank to suppress page navigation */}}\n"
  },
  {
    "path": "layouts/minimal/header.html",
    "content": "{{/* Initialize global variables */}}\n{{- $size := .Site.Params.style.title.size | default 4 -}}\n{{- $headingStyle := .Site.Params.style.title.headingStyle | default \"display\" -}}\n{{- $contentStyle := .Site.Params.style.title.contentStyle | default \"lead text-muted\" -}}\n{{- $padding := partial \"utilities/GetPadding.html\" -}}\n\n{{/* Initialize local variables */}}\n{{- $breakpoint := .Scratch.Get \"breakpoint\" -}}\n{{ $title := .Title }}\n{{ if and .Site.Params.main.titleCase (not .Params.exact) }}{{ $title = title $title }}{{ end }}\n\n{{/* Display title */}}\n{{ with $title }}<h1 id=\"{{ anchorize . }}\" class=\"{{ $headingStyle }}-{{ $size }} pt-1\">{{ . }}</h1>{{ end }}\n\n{{/* Display description */}}\n{{ with .Description }}\n    <div class=\"{{ $contentStyle }} py-{{ $padding.y }}\">{{ . | $.RenderString | safeHTML }}</div>\n{{ end }}\n"
  },
  {
    "path": "layouts/robots.txt",
    "content": "User-agent: *\nAllow: /\n\nSitemap: {{ urls.JoinPath .Site.BaseURL \"sitemap.xml\" }}"
  },
  {
    "path": "layouts/single.html",
    "content": "{{ define \"main\" -}}\n    {{- $breakpoint := $.Scratch.Get \"breakpoint\" -}}\n    {{- $padding := partial \"utilities/GetPadding.html\" -}}\n    {{- $sidebar := partial \"page/sidebar\" . -}}\n\n    {{/* Render the offcanvas sidebar and content blocks */}}\n    {{- partial \"page/sidebar-offcanvas.html\" (dict \"section\" $.Section \"raw\" $sidebar) -}}\n    {{- partial \"page/blocks.html\" . -}}\n\n    {{/* Render the single page content using responsive columns */}}\n    {{/*    Column 1: sidebar navigation, visible in medium viewports and above (uses offcanvas on small devices) */}}\n    {{/*    Column 2: main page content (header, body, footer), always visible */}}\n    {{/*    Column 3: sharing buttons and TOC navigation or specials (CTA), visible in large viewports */}}\n    {{/*              content is folded into main column (handled by page elements) */}}\n    {{ if (gt (len .RawContent) 0) }}\n        <div class=\"container-xxl flex-fill py-{{ $padding.y }} px-{{ $padding.x }} px-xxl-0\">\n            <div class=\"row row-cols-1 row-cols-{{ $breakpoint.current }}-2 row-cols-{{ $breakpoint.next }}-3\">\n                <div class=\"col col-{{ $breakpoint.next }}-2 d-none d-{{ $breakpoint.next }}-block sidebar-overflow sticky-top p-0\">\n                    {{ $sidebar | safeHTML }}\n                </div>\n                <div class=\"col-12 col-{{ $breakpoint.current }}-9 col-{{ $breakpoint.next }}-8 mb-5\">\n                    {{ .Render \"header\" }}\n\n                    {{ .Render \"body\" }}\n                    \n                    {{ .Render \"footer\" }}\n                </div>\n                <div class=\"col col-{{ $breakpoint.current }}-3 col-{{ $breakpoint.next }}-2 d-none d-{{ $breakpoint.current }}-block\">\n                    {{ .Render \"toc\" }}\n                </div>\n            </div>\n        </div>\n    {{ end }}\n{{ end -}}\n"
  },
  {
    "path": "layouts/single.xml",
    "content": "{{ define \"main\" }}\n\t<browserconfig>\n\t\t<msapplication>\n\t\t\t<tile>\n\t\t\t\t{{ with resources.Get \"img/favicon.png\" }} \n\t\t\t\t\t{{ $square70 := .Resize \"70x70 CatmullRom\" }} \n\t\t\t\t\t{{ $square150 := .Resize \"150x150 CatmullRom\" }} \n\t\t\t\t\t{{ $wide310 := .Fill \"310x150 CatmullRom\" }} \n\t\t\t\t\t{{ $square310 := .Resize \"310x310 CatmullRom\" }}\n\t\t\t\t\t<square70x70logo src=\"{{ $square70.RelPermalink }}\" />\n\t\t\t\t\t<square150x150logo src=\"{{ $square150.RelPermalink }}\" />\n\t\t\t\t\t<wide310x150logo src=\"{{ $wide310.RelPermalink }}\" />\n\t\t\t\t\t<square310x310logo src=\"{{ $square310.RelPermalink }}\" />\n\t\t\t\t{{ end }}\n\t\t\t\t<TileColor>#000000</TileColor>\n\t\t\t</tile>\n\t\t</msapplication>\n\t</browserconfig>\n{{ end }}"
  },
  {
    "path": "layouts/tags/list.html",
    "content": "{{ define \"main\" }}\n    {{- $page := . -}}\n    {{- $layout := $page.Params.layout -}}\n    {{- $breakpoint := $.Scratch.Get \"breakpoint\" -}}\n    {{- $padding := partial \"utilities/GetPadding.html\" -}}\n    {{- $pageTitle := .Page.Title }}\n    {{ if and site.Params.main.titleCase (not .Page.Params.exact) }}{{ $pageTitle = title $pageTitle }}{{ end }}\n        <div class=\"container-xxl flex-fill py-{{ $padding.y }} px-{{ $padding.x }} px-xxl-0\">\n            <div class=\"row row-cols-1 row-cols-{{ $breakpoint.current }}-2 row-cols-{{ $breakpoint.next }}-3\">\n                <div class=\"col col-{{ $breakpoint.next }}-2 d-none d-{{ $breakpoint.next }}-block\">\n                </div>\n                <div class=\"container col-12 col-{{ $breakpoint.current }}-9 col-{{ $breakpoint.next }}-8 mb-5\">\n                    {{- if ne $layout \"featured\" -}}\n                        {{ if and (not $page.IsHome) site.Params.navigation.breadcrumb }}\n                            <div>{{ partial \"assets/breadcrumb.html\" (dict \"page\" $page) }}</div>\n                        {{ end -}}\n                    {{- end -}}\n\n                    <p class=\"display-4 mt-5\">{{ $pageTitle }}</p>\n\n                    {{ if eq .Kind \"taxonomy\" }}\n                        {{- partial \"page/taxonomy-list.html\" . -}}\n                    {{ else }}\n                        {{- partial \"page/taxonomy-tag.html\" . -}}\n                    {{ end }}\n                </div>\n                <div class=\"col col-{{ $breakpoint.current }}-3 col-{{ $breakpoint.next }}-2 d-none d-{{ $breakpoint.current }}-block\">\n                </div>\n            </div>\n        </div>\n{{ end }}"
  },
  {
    "path": "layouts/toc.html",
    "content": "{{- $download := .Params.download -}}\n{{- $includeToc := .Scratch.Get \"includeToc\" -}}\n\n{{ if or $download $includeToc }}\n    <div class=\"toc toc-sidebar mb-5 my-md-0 mb-lg-5 pb-3 text-body-secondary sticky-top\">\n        {{ if $download }}\n            <div class=\"mb-5 p-0\">\n                {{ partial \"assets/download.html\" (dict \n                    \"download\"    $download\n                    \"outline\"     true\n                    \"button-size\" \"sm\"\n                    \"order\"       \"last\"\n                ) }}\n            </div>\n        {{ end }}\n\n        {{ if $includeToc }}\n            {{ $index := partial \"assets/toc.html\" (dict \"page\" .) }}\n            {{ $index | safeHTML }}\n        {{ end -}}\n    </div>\n{{ end }}\n"
  },
  {
    "path": "netlify.toml",
    "content": "# Auto-generated file - do not modify\n[build]\n  command = 'HUGO_HINODE_VERSION=$(git describe --tags $(git rev-list --tags --max-count=1)) npm run build:example'\n  publish = 'exampleSite/public'\n\n  [build.environment]\n    DART_SASS_VERSION = '1.98.0'\n    HUGO_ENABLEGITINFO = 'true'\n    HUGO_ENV = 'production'\n    HUGO_VERSION = '0.153.1'\n    NODE_VERSION = '24.12.0'\n    NPM_VERSION = '11.6.2'\n\n[context]\n  [context.branch-deploy]\n    command = 'HUGO_HINODE_VERSION=$(git describe --tags $(git rev-list --tags --max-count=1)) npm run build:example -- -b $DEPLOY_PRIME_URL'\n\n  [context.deploy-preview]\n    command = 'HUGO_HINODE_VERSION=$(git describe --tags $(git rev-list --tags --max-count=1)) npm run build:example -- -b $DEPLOY_PRIME_URL'\n\n[dev]\n  autoLaunch = false\n  command = 'HUGO_HINODE_VERSION=$(git describe --tags $(git rev-list --tags --max-count=1)) npm run start:example'\n  framework = '#custom'\n  port = 8888\n  publish = 'public'\n  targetPort = 1313\n\n[[plugins]]\n  package = 'netlify-plugin-hugo-cache-resources'\n\n[[headers]]\n  for = '/**'\n\n  [headers.values]\n    Access-Control-Allow-Origin = '*'\n    Content-Security-Policy = \"\"\"\n        base-uri 'self'; \\\n        connect-src 'self' *.analytics.google.com *.google.com *.google-analytics.com *.googletagmanager.com; \\\n        default-src 'none'; \\\n        font-src 'self' fonts.gstatic.com data:; \\\n        form-action 'self'; \\\n        frame-ancestors 'self'; \\\n        frame-src *.googletagmanager.com player.cloudinary.com www.youtube-nocookie.com www.youtube.com player.vimeo.com; \\\n        img-src 'self' *.google-analytics.com *.googletagmanager.com googletagmanager.com ssl.gstatic.com www.gstatic.com data: *.imgix.net *.imagekit.io *.cloudinary.com i.ytimg.com tile.openstreetmap.org i.vimeocdn.com; \\\n        manifest-src 'self'; \\\n        media-src 'self'; \\\n        object-src 'none'; \\\n        script-src 'self' *.google-analytics.com *.googletagmanager.com *.analytics.google.com googletagmanager.com tagmanager.google.com player.vimeo.com; \\\n        style-src 'self' googletagmanager.com tagmanager.google.com fonts.googleapis.com www.youtube.com 'unsafe-inline'; \\\n        \"\"\"\n    Permissions-Policy = 'geolocation=(), midi=(), sync-xhr=(), microphone=(), camera=(), magnetometer=(), gyroscope=(), fullscreen=(), payment=() '\n    Referrer-Policy = 'strict-origin'\n    Strict-Transport-Security = 'max-age=31536000; includeSubDomains; preload'\n    X-Content-Type-Options = 'nosniff'\n    X-XSS-Protection = '1; mode=block'\n    cache-control = 'max-age=0, no-cache, no-store, must-revalidate '\n\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"@gethinode/hinode\",\n  \"version\": \"0.0.0-semantically-released\",\n  \"description\": \"Hinode is a production-ready Hugo theme built on Bootstrap 5. Open source, actively maintained, and built for developers.\",\n  \"keywords\": [\n    \"hugo\",\n    \"theme\",\n    \"bootstrap\",\n    \"responsive\",\n    \"front-end\",\n    \"blog\",\n    \"documentation\"\n  ],\n  \"main\": \"index.js\",\n  \"private\": false,\n  \"publishConfig\": {\n    \"access\": \"public\",\n    \"registry\": \"https://registry.npmjs.org/\"\n  },\n  \"scripts\": {\n    \"prestart\": \"npm run -s mod:vendor\",\n    \"start\": \"hugo server --bind=0.0.0.0 --disableFastRender --printI18nWarnings\",\n    \"start:example\": \"npm run -s prestart && hugo server --bind=0.0.0.0 --disableFastRender --printI18nWarnings -s exampleSite\",\n    \"start:prod\": \"npm run -s prestart && hugo server --bind=0.0.0.0 --disableFastRender --printI18nWarnings --minify -e production\",\n    \"start:example:prod\": \"npm run -s prestart  && hugo server --bind=0.0.0.0 --disableFastRender --printI18nWarnings --minify -e production -s exampleSite\",\n    \"prebuild\": \"npm run clean:public && npm run -s mod:vendor\",\n    \"build\": \"hugo --gc --minify\",\n    \"build:cache\": \"npm run -s prebuild && hugo config | grep cachedir && hugo --gc --minify -e ci\",\n    \"build:example\": \"npm run -s prebuild && hugo --gc --minify -s exampleSite\",\n    \"build:example:ci\": \"npm run -s prebuild && hugo --gc --minify -s exampleSite -e ci\",\n    \"build:debug\": \"hugo -e debug --debug\",\n    \"build:headers\": \"npm run build:headers:dev && npm run build:headers:prod\",\n    \"build:headers:dev\": \"hugo --renderSegments headers -d prebuild-headers-dev -e development && cpy prebuild-headers-dev/server.toml config/_default/ --flat\",\n    \"build:headers:prod\": \"hugo --renderSegments headers -d prebuild-headers-prod -e production && cpy prebuild-headers-prod/netlify.toml ./ --flat\",\n    \"build:example:headers\": \"hugo -s exampleSite --renderSegments headers -d prebuild && cpy exampleSite/prebuild/netlify.toml ./ --flat && cpy exampleSite/prebuild/server.toml exampleSite/config/_default/ --flat\",\n    \"build:preview\": \"npm run build -D -F\",\n    \"clean:public\": \"rimraf public exampleSite/public\",\n    \"clean:install\": \"rimraf package-lock.json node_modules\",\n    \"lint\": \"npm-run-all lint:**\",\n    \"lint:scripts\": \"eslint assets/js --no-error-on-unmatched-pattern\",\n    \"lint:styles\": \"stylelint \\\"assets/scss/**/*.{css,sass,scss,sss,less}\\\" --allow-empty-input\",\n    \"lint:markdown\": \"markdownlint-cli2 \\\"*.md\\\" \\\"content/**/*.md\\\" \\\"exampleSite/**/*.md\\\"\",\n    \"mod:clean\": \"hugo mod clean\",\n    \"mod:update\": \"rimraf _vendor && hugo mod get -u ./... && npm run -s mod:vendor && npm run -s mod:tidy\",\n    \"mod:tidy\": \"hugo mod tidy && hugo mod tidy -s exampleSite\",\n    \"mod:vendor\": \"rimraf _vendor && hugo mod vendor\",\n    \"test\": \"npm run -s lint\",\n    \"env\": \"hugo env\",\n    \"precheck\": \"npm version\",\n    \"prepare\": \"node .husky/install.mjs\",\n    \"check\": \"hugo version\",\n    \"create:syntax\": \"npm-run-all update:syntax:**\",\n    \"update:syntax:light1\": \"hugo gen chromastyles --style=github > ./assets/scss/components/_syntax-light.scss\",\n    \"update:syntax:light2\": \"replace-in-files --string=\\\"#0086b3\\\" --replacement=\\\"#006b8f\\\" ./assets/scss/components/_syntax-light.scss\",\n    \"update:syntax:light3\": \"replace-in-files --string=\\\"#009999\\\" --replacement=\\\"#007a7a\\\" ./assets/scss/components/_syntax-light.scss\",\n    \"update:syntax:light4\": \"replace-in-files --string=\\\"#999988\\\" --replacement=\\\"#6d6d5d\\\" ./assets/scss/components/_syntax-light.scss\",\n    \"update:syntax:dark1\": \"hugo gen chromastyles --style=github-dark > ./assets/scss/components/_syntax-dark.scss\",\n    \"update:syntax:dark2\": \"replace-in-files --string=\\\"#ffffcc\\\" --replacement=\\\"#373700\\\" ./assets/scss/components/_syntax-dark.scss\",\n    \"update:syntax:dark3\": \"replace-in-files --string=\\\"#8b949e\\\" --replacement=\\\"#979fa8\\\" ./assets/scss/components/_syntax-dark.scss\",\n    \"update:syntax:dark4\": \"replace-in-files --string=\\\".na {  }\\\" --replacement=\\\".na { color: #00cccc }\\\" ./assets/scss/components/_syntax-dark.scss\",\n    \"update:syntax:dark5\": \"replace-in-files --string=\\\".nb {  }\\\" --replacement=\\\".nb { color: #00a2d8 }\\\" ./assets/scss/components/_syntax-dark.scss\",\n    \"update:syntax:dark6\": \"replace-in-files --string=\\\"#6e7681\\\" --replacement=\\\"#999fa8\\\" ./assets/scss/components/_syntax-dark.scss\",\n    \"upgrade\": \"npx npm-check-updates -u && npm run -s mod:update\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/gethinode/hinode.git\"\n  },\n  \"author\": \"Mark Dumay\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/gethinode/hinode/issues\"\n  },\n  \"homepage\": \"https://gethinode.com\",\n  \"dependencies\": {\n    \"@fullhuman/postcss-purgecss\": \"^8.0.0\",\n    \"autoprefixer\": \"^10.5.0\",\n    \"cssnano\": \"^8.0.0\",\n    \"cssnano-preset-advanced\": \"^8.0.0\",\n    \"hugo-extended\": \"^0.161.1\",\n    \"postcss-cli\": \"^11.0.1\",\n    \"rimraf\": \"^6.1.3\"\n  },\n  \"devDependencies\": {\n    \"@commitlint/cli\": \"^21.0.0\",\n    \"@commitlint/config-conventional\": \"^21.0.0\",\n    \"@eslint/js\": \"^10.0.1\",\n    \"@semantic-release/exec\": \"^7.1.0\",\n    \"@semantic-release/git\": \"^10.0.1\",\n    \"@stylistic/eslint-plugin\": \"^5.10.0\",\n    \"cpy-cli\": \"^7.0.0\",\n    \"cz-conventional-changelog\": \"^3.3.0\",\n    \"eslint\": \"^10.3.0\",\n    \"globals\": \"^17.6.0\",\n    \"husky\": \"^9.1.7\",\n    \"markdownlint-cli2\": \"^0.22.1\",\n    \"netlify-plugin-hugo-cache-resources\": \"^0.2.1\",\n    \"npm-run-all\": \"^4.1.5\",\n    \"replace-in-files-cli\": \"^4.0.0\",\n    \"semantic-release\": \"^25.0.3\",\n    \"shx\": \"^0.4.0\",\n    \"stylelint\": \"^17.11.0\",\n    \"stylelint-config-standard-scss\": \"^17.0.0\"\n  },\n  \"optionalDependencies\": {\n    \"fsevents\": \"*\"\n  },\n  \"release\": {\n    \"branches\": [\n      \"main\",\n      {\n        \"name\": \"beta\",\n        \"prerelease\": true\n      }\n    ],\n    \"plugins\": [\n      \"@semantic-release/commit-analyzer\",\n      \"@semantic-release/release-notes-generator\",\n      \"@semantic-release/github\",\n      [\n        \"@semantic-release/exec\",\n        {\n          \"prepare\": \"npm install\"\n        }\n      ],\n      [\n        \"@semantic-release/git\",\n        {\n          \"assets\": [\n            \"dist\",\n            \"package.json\",\n            \"package-lock.json\"\n          ],\n          \"message\": \"chore(release): ${nextRelease.version} [skip ci]\\n\\n${nextRelease.notes}\"\n        }\n      ]\n    ]\n  }\n}\n"
  },
  {
    "path": "static/js/alias.js",
    "content": "const alias = document.querySelector(\"link[rel='canonical']\").getAttribute('href')\nconst params = window.location.search + window.location.hash\nwindow.location = alias + params\n"
  },
  {
    "path": "theme.toml",
    "content": "name = \"Hinode\"\nlicense = \"MIT\"\nlicenselink = \"https://github.com/gethinode/hinode/blob/main/LICENSE\"\ndescription = \"A clean documentation and blog theme for your Hugo site based on Bootstrap 5.\"\nhomepage = \"https://gethinode.com\"\ntags = [\"blog\", \"documentation\", \"minimal\", \"modern\", \"customizable\", \"search\", \"bootstrap\"]\nfeatures = [\"security aware\", \"fast by default\", \"seo-ready\", \"development tools\", \"bootstrap framework\", \"netlify-ready\", \"full text search\", \"page layouts\", \"versioned documentation\"]\nmin_version = \"0.146.0\"\n\n[author]\n  name = \"Mark Dumay\"\n  homepage = \"https://github.com/markdumay\""
  }
]