diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 2cc5319b..afa7f5e6 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -1,3 +1,10 @@
-*                                      @netboxlabs/product-all @weyrick @natm
-/docs/netbox-enterprise/*              @netboxlabs/product-all @weyrick @natm @RangerRick 
-/docs/netbox-extensions/diode/*        @netboxlabs/product-all @weyrick @mfiedorowicz
+# Global code owners for NetBox Labs Documentation Hub
+# These users will be automatically requested for review on all PRs
+
+# Default reviewers for all documentation changes
+* @magicalyak @nbl-csling @cruse1977 @richbibby @rboucher-me @DanBeckDev
+
+# Add additional reviewers by uncommenting and updating:
+# * @tom @additional-teammate1 @additional-teammate2
+# /.github/ @tom @devops-teammate
+# /docs/ @tom @content-reviewer 
diff --git a/.github/ISSUE_TEMPLATE/redirect-to-new-repo.md b/.github/ISSUE_TEMPLATE/redirect-to-new-repo.md
deleted file mode 100644
index 22809a3d..00000000
--- a/.github/ISSUE_TEMPLATE/redirect-to-new-repo.md
+++ /dev/null
@@ -1,32 +0,0 @@
----
-name: Repository Deprecated
-about: This repository has been deprecated
-title: "⚠️ Repository Deprecated - Use netboxlabs-website-dochub"
-labels: ['deprecated']
-assignees: ''
----
-
-# ⚠️ This Repository Has Been Deprecated
-
-**This repository is no longer maintained as of July 17, 2025.**
-
-## 🔄 Please Use the New Repository
-
-**All issues, pull requests, and contributions should now be made to:**
-
-**https://github.com/netboxlabs/netboxlabs-website-dochub**
-
-## 📝 What This Means
-
-- ❌ No new issues will be accepted in this repository
-- ❌ No new pull requests will be merged
-- ❌ No new features or bug fixes will be implemented here
-- ✅ All active development happens in the new repository
-
-## 🚀 Next Steps
-
-1. **Visit the new repository**: https://github.com/netboxlabs/netboxlabs-website-dochub
-2. **Create your issue there** using their issue templates
-3. **Follow their contribution guidelines** for the most up-to-date process
-
-Thank you for your understanding and continued contributions to NetBox Labs documentation!
\ No newline at end of file
diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
deleted file mode 100644
index 95099a35..00000000
--- a/.github/pull_request_template.md
+++ /dev/null
@@ -1,33 +0,0 @@
-# ⚠️ Repository Deprecated - Pull Request Not Accepted
-
-**This repository has been deprecated as of July 17, 2025.**
-
-## 🔄 Please Redirect Your Contribution
-
-**All pull requests should now be made to:**
-
-**https://github.com/netboxlabs/netboxlabs-website-dochub**
-
-## 📝 What This Means
-
-- ❌ This pull request will not be reviewed or merged
-- ❌ No new contributions are accepted in this repository
-- ✅ All active development happens in the new repository
-
-## 🚀 How to Proceed
-
-1. **Close this pull request** - it will not be processed
-2. **Visit the new repository**: https://github.com/netboxlabs/netboxlabs-website-dochub
-3. **Create your pull request there** following their contribution guidelines
-4. **Review their documentation** for the most up-to-date development process
-
-## 💡 Migration Guide
-
-Your contribution is valuable! To migrate your changes:
-
-1. Clone the new repository: `git clone https://github.com/netboxlabs/netboxlabs-website-dochub`
-2. Follow their setup instructions
-3. Port your changes to their structure
-4. Submit your PR in the active repository
-
-Thank you for your interest in contributing to NetBox Labs documentation!
\ No newline at end of file
diff --git a/.github/workflows/auto-merge-docs.yml b/.github/workflows/auto-merge-docs.yml
new file mode 100644
index 00000000..979eeed4
--- /dev/null
+++ b/.github/workflows/auto-merge-docs.yml
@@ -0,0 +1,180 @@
+name: Auto-merge Documentation Updates
+
+on:
+  pull_request:
+    types: [opened, synchronize, reopened]
+    branches: [master]
+
+jobs:
+  auto-merge:
+    runs-on: ubuntu-latest
+    if: >
+      github.actor == 'github-actions[bot]' &&
+      startsWith(github.head_ref, 'automated-docs-update') &&
+      contains(github.event.pull_request.labels.*.name, 'automated')
+    permissions:
+      contents: write
+      pull-requests: write
+      checks: read
+
+    steps:
+      - name: Wait for deployment checks
+        uses: actions/github-script@v7
+        id: wait-for-checks
+        with:
+          script: |
+            const maxWaitTime = 10 * 60 * 1000; // 10 minutes
+            const pollInterval = 15 * 1000; // 15 seconds
+            const startTime = Date.now();
+            
+            while (Date.now() - startTime < maxWaitTime) {
+              const { data: checks } = await github.rest.checks.listForRef({
+                owner: context.repo.owner,
+                repo: context.repo.repo,
+                ref: context.payload.pull_request.head.sha,
+              });
+              
+              // Look for Vercel deployment check (common names)
+              const vercelCheck = checks.check_runs.find(check => 
+                check.name.includes('vercel') || 
+                check.name.includes('deployment') ||
+                check.name.includes('deploy') ||
+                check.name.includes('build')
+              );
+              
+                          console.log("Found " + checks.check_runs.length + " checks");
+            checks.check_runs.forEach(check => {
+              console.log("- " + check.name + ": " + check.status + " (" + check.conclusion + ")");
+            });
+              
+              if (vercelCheck) {
+                if (vercelCheck.status === 'completed') {
+                  if (vercelCheck.conclusion === 'success') {
+                    console.log('✅ Deployment check passed');
+                    core.setOutput('checks_passed', 'true');
+                    return;
+                  } else {
+                    console.log("❌ Deployment check failed: " + vercelCheck.conclusion);
+                    core.setOutput('checks_passed', 'false');
+                    return;
+                  }
+                } else {
+                  console.log("⏳ Deployment check still running: " + vercelCheck.status);
+                }
+              } else {
+                console.log('⏳ No deployment checks found yet, waiting...');
+              }
+              
+              await new Promise(resolve => setTimeout(resolve, pollInterval));
+            }
+            
+            console.log('⏰ Timeout waiting for checks');
+            core.setOutput('checks_passed', 'false');
+
+      - name: Enable auto-merge
+        if: steps.wait-for-checks.outputs.checks_passed == 'true'
+        uses: actions/github-script@v7
+        with:
+          script: |
+            try {
+              // Update PR branch to ensure it's up to date
+              try {
+                await github.rest.pulls.updateBranch({
+                  owner: context.repo.owner,
+                  repo: context.repo.repo,
+                  pull_number: context.payload.pull_request.number
+                });
+                console.log('✅ PR branch updated successfully');
+              } catch (updateError) {
+                console.log("⚠️ Branch update failed (may not be needed): " + updateError.message);
+              }
+
+              // Auto-approve the PR first
+              await github.rest.pulls.createReview({
+                owner: context.repo.owner,
+                repo: context.repo.repo,
+                pull_number: context.payload.pull_request.number,
+                event: 'APPROVE',
+                body: '🤖 **Auto-approved**: Automated documentation update passed all deployment checks.\n\n✅ Vercel deployment successful\n✅ Documentation transformation verified\n✅ No conflicts detected'
+              });
+              console.log('✅ PR auto-approved');
+
+              // Try to merge the PR directly
+              try {
+                await github.rest.pulls.merge({
+                  owner: context.repo.owner,
+                  repo: context.repo.repo,
+                  pull_number: context.payload.pull_request.number,
+                  merge_method: 'squash',
+                  commit_title: context.payload.pull_request.title + " (#" + context.payload.pull_request.number + ")",
+                  commit_message: 'Automated documentation update - auto-merged after successful deployment checks'
+                });
+
+                await github.rest.issues.createComment({
+                  owner: context.repo.owner,
+                  repo: context.repo.repo,
+                  issue_number: context.payload.pull_request.number,
+                  body: '🤖 **Auto-merged**: This PR has been automatically merged after all checks passed.\n\n✅ Deployment checks passed\n✅ Auto-approval granted\n✅ Merge completed successfully'
+                });
+
+                console.log('✅ PR merged successfully');
+              } catch (mergeError) {
+                console.log("Auto-merge failed, trying alternative approach: " + mergeError.message);
+                
+                // Alternative: Enable GitHub's built-in auto-merge feature
+                try {
+                  const { data: updatedPR } = await github.rest.pulls.update({
+                    owner: context.repo.owner,
+                    repo: context.repo.repo,
+                    pull_number: context.payload.pull_request.number
+                  });
+
+                  await github.rest.issues.createComment({
+                    owner: context.repo.owner,
+                    repo: context.repo.repo,
+                    issue_number: context.payload.pull_request.number,
+                    body: '🤖 **Auto-merge enabled**: This PR is ready for automatic merge once all required status checks pass.\n\n✅ Deployment checks passed\n✅ Auto-approval granted\n✅ Waiting for final merge conditions'
+                  });
+
+                  console.log('✅ Auto-merge enabled via GitHub API');
+                } catch (autoMergeError) {
+                  throw new Error("Both direct merge and auto-merge failed: " + autoMergeError.message);
+                }
+              }
+              
+            } catch (error) {
+              console.error('Failed to enable auto-merge:', error);
+              
+              // Check if it's a branch protection issue
+              const isProtectionError = error.message.includes('protected') || 
+                                       error.message.includes('required') || 
+                                       error.message.includes('review') ||
+                                       error.message.includes('status check') ||
+                                       error.message.includes('branch protection');
+              
+              let message = '';
+              if (isProtectionError) {
+                message = '🛡️ **Branch Protection**: Auto-merge blocked by branch protection rules.\n\n✅ **All checks passed** - Ready for manual review and merge.\n\n**Next Steps:**\n- Review the automated documentation changes\n- Approve if changes look correct\n- Merge when ready\n\n**Note**: This is normal behavior with protected branches that require additional reviews.';
+              } else {
+                message = "⚠️ **Auto-merge setup failed**: " + error.message + "\n\nThis PR requires manual review and merging.\n\n**Details**: The automated process completed successfully, but the final merge step needs manual intervention.";
+              }
+              
+              await github.rest.issues.createComment({
+                owner: context.repo.owner,
+                repo: context.repo.repo,
+                issue_number: context.payload.pull_request.number,
+                body: message
+              });
+            }
+
+      - name: Handle failed checks
+        if: steps.wait-for-checks.outputs.checks_passed == 'false'
+        uses: actions/github-script@v7
+        with:
+          script: |
+            await github.rest.issues.createComment({
+              owner: context.repo.owner,
+              repo: context.repo.repo,
+              issue_number: context.payload.pull_request.number,
+              body: '❌ **Auto-merge blocked**: Deployment checks failed.\n\nThis automated documentation update requires manual review before merging.\n\nPlease check the failed deployment and resolve any issues before proceeding.'
+            }); 
\ No newline at end of file
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
deleted file mode 100644
index 62b0c986..00000000
--- a/.github/workflows/ci.yml
+++ /dev/null
@@ -1,22 +0,0 @@
-name: ci 
-
-
-on:
-  push:
-    branches:
-      - master 
-
-
-      - main
-permissions:
-  contents: write
-jobs:
-  deploy:
-    runs-on: ubuntu-latest
-    steps:
-      - uses: actions/checkout@v3
-      - uses: actions/setup-python@v4
-        with:
-          python-version: 3.x
-      - run: pip install mkdocs-material==8.3.9 mkdocs-material-extensions==1.0.3 mkdocs==1.3.1
-      - run: mkdocs gh-deploy --force
diff --git a/.github/workflows/cleanup-automated-prs.yml b/.github/workflows/cleanup-automated-prs.yml
new file mode 100644
index 00000000..42274854
--- /dev/null
+++ b/.github/workflows/cleanup-automated-prs.yml
@@ -0,0 +1,162 @@
+name: Cleanup Automated Documentation PRs
+
+on:
+  pull_request:
+    types: [closed]
+    branches: [master]
+
+jobs:
+  cleanup-automated-prs:
+    if: github.event.pull_request.merged == true
+    runs-on: ubuntu-latest
+    permissions:
+      contents: read
+      pull-requests: write
+
+    steps:
+      - name: Checkout repository
+        uses: actions/checkout@v4
+        with:
+          fetch-depth: 2  # Fetch at least two commits for HEAD~1 reference
+
+      - name: Check if merged PR contains submodule updates
+        id: check-submodule-updates
+        run: |
+          # Check if the merged PR modified submodule references
+          PR_NUMBER="${{ github.event.pull_request.number }}"
+          
+          # Get the files changed in the merged PR
+          git diff --name-only HEAD~1 HEAD > changed_files.txt
+          
+          # Check if submodule directories were updated
+          SUBMODULE_UPDATED="false"
+          if grep -q "external-repos/netbox" changed_files.txt || grep -q "external-repos/console-docs" changed_files.txt; then
+            SUBMODULE_UPDATED="true"
+          fi
+          
+          # Also check if .gitmodules was updated (submodule configuration changes)
+          if grep -q ".gitmodules" changed_files.txt; then
+            SUBMODULE_UPDATED="true"
+          fi
+          
+          echo "submodule_updated=$SUBMODULE_UPDATED" >> $GITHUB_OUTPUT
+          echo "PR #$PR_NUMBER submodule updates: $SUBMODULE_UPDATED"
+
+      - name: Find and close redundant automated PRs
+        if: steps.check-submodule-updates.outputs.submodule_updated == 'true'
+        uses: actions/github-script@v7
+        with:
+          script: |
+            const { data: prs } = await github.rest.pulls.list({
+              owner: context.repo.owner,
+              repo: context.repo.repo,
+              state: 'open',
+              base: 'master'
+            });
+            
+            // Find automated documentation PRs
+            const automatedPRs = prs.filter(pr => 
+              pr.head.ref.startsWith('automated-docs-update') || 
+              pr.title.includes('🤖 Automated Documentation Updates')
+            );
+            
+            console.log("Found " + automatedPRs.length + " open automated PRs to evaluate");
+            
+            if (automatedPRs.length === 0) {
+              console.log('No automated PRs found - nothing to clean up');
+              return;
+            }
+            
+            // Get the current submodule commit hashes after the merge
+            const { execSync } = require('child_process');
+            const currentNetboxCommit = execSync('git ls-tree HEAD external-repos/netbox | awk \'{print $3}\'', { encoding: 'utf8' }).trim();
+            const currentConsoleCommit = execSync('git ls-tree HEAD external-repos/console-docs | awk \'{print $3}\'', { encoding: 'utf8' }).trim();
+            
+            console.log("Current submodule commits after merge:");
+            console.log("- NetBox: " + currentNetboxCommit);
+            console.log("- Console: " + currentConsoleCommit);
+            
+            for (const pr of automatedPRs) {
+              try {
+                // Check the submodule commits in each automated PR
+                const { data: prFiles } = await github.rest.pulls.listFiles({
+                  owner: context.repo.owner,
+                  repo: context.repo.repo,
+                  pull_number: pr.number
+                });
+                
+                // Look for submodule updates in the automated PR
+                const netboxUpdate = prFiles.find(file => file.filename === 'external-repos/netbox');
+                const consoleUpdate = prFiles.find(file => file.filename === 'external-repos/console-docs');
+                
+                let shouldClose = false;
+                let reason = '';
+                
+                // If the automated PR has the same or older submodule commits, close it
+                if (netboxUpdate) {
+                  // For submodule changes, the 'patch' contains the commit hash changes
+                  if (netboxUpdate.patch && netboxUpdate.patch.includes(currentNetboxCommit)) {
+                    shouldClose = true;
+                    reason += 'NetBox submodule update already included in merged PR. ';
+                  }
+                }
+                
+                if (consoleUpdate) {
+                  if (consoleUpdate.patch && consoleUpdate.patch.includes(currentConsoleCommit)) {
+                    shouldClose = true;
+                    reason += 'Console submodule update already included in merged PR. ';
+                  }
+                }
+                
+                // If no specific submodule files found, assume it might be redundant if it's older
+                if (!netboxUpdate && !consoleUpdate && pr.created_at < '${{ github.event.pull_request.created_at }}') {
+                  shouldClose = true;
+                  reason = 'Automated PR predates manual PR with submodule updates. ';
+                }
+                
+                if (shouldClose) {
+                  console.log("Closing automated PR #" + pr.number + ": " + reason);
+                  
+                  await github.rest.pulls.update({
+                    owner: context.repo.owner,
+                    repo: context.repo.repo,
+                    pull_number: pr.number,
+                    state: 'closed'
+                  });
+                  
+                  await github.rest.issues.createComment({
+                    owner: context.repo.owner,
+                    repo: context.repo.repo,
+                    issue_number: pr.number,
+                    body: [
+                      "🤖 **Auto-closed**: " + reason,
+                      '',
+                      "This automated PR has been superseded by manual PR #${{ github.event.pull_request.number }} which included the same or newer documentation updates.",
+                      '',
+                      '**Submodule versions after merge:**',
+                      "- NetBox: `" + currentNetboxCommit + "`",
+                      "- Console: `" + currentConsoleCommit + "`",
+                      '',
+                      '*Automated cleanup triggered by PR merge event.*'
+                    ].join('\n')
+                  });
+                } else {
+                  console.log("Keeping automated PR #" + pr.number + " - contains newer updates");
+                }
+                
+              } catch (error) {
+                console.error("Error processing automated PR #" + pr.number + ":", error.message);
+              }
+            }
+
+      - name: Summary
+        if: always()
+        run: |
+          echo "🧹 Automated PR cleanup completed"
+          echo "- Merged PR: #${{ github.event.pull_request.number }}"
+          echo "- Submodule updates detected: ${{ steps.check-submodule-updates.outputs.submodule_updated }}"
+          if [ "${{ steps.check-submodule-updates.outputs.submodule_updated }}" = "true" ]; then
+            echo "- Redundant automated PRs have been closed"
+          else
+            echo "- No cleanup needed (no submodule updates)"
+          fi 
\ No newline at end of file
diff --git a/.github/workflows/generate-changelog.yml b/.github/workflows/generate-changelog.yml
new file mode 100644
index 00000000..24b99eb8
--- /dev/null
+++ b/.github/workflows/generate-changelog.yml
@@ -0,0 +1,378 @@
+name: Generate Changelog
+
+on:
+  push:
+    tags:
+      - 'v*.*.*'
+      - 'v*.*.*-*'
+  workflow_dispatch:
+    inputs:
+      version:
+        description: 'Version to generate changelog for (optional, defaults to latest tag)'
+        required: false
+        type: string
+      update_unreleased:
+        description: 'Update unreleased section instead of creating version entry'
+        required: false
+        type: boolean
+        default: false
+
+jobs:
+  generate-changelog:
+    runs-on: ubuntu-latest
+    permissions:
+      contents: write
+      pull-requests: write
+      actions: read
+
+    steps:
+      - name: Checkout repository
+        uses: actions/checkout@v4
+        with:
+          fetch-depth: 0
+          token: ${{ secrets.GITHUB_TOKEN }}
+
+      - name: Configure Git
+        run: |
+          git config user.name "github-actions[bot]"
+          git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
+
+      - name: Determine version and previous version
+        id: version
+        run: |
+          if [ "${{ github.event_name }}" = "workflow_dispatch" ] && [ -n "${{ inputs.version }}" ]; then
+            VERSION="${{ inputs.version }}"
+          elif [ "${{ github.event_name }}" = "push" ] && [[ "${{ github.ref }}" =~ ^refs/tags/ ]]; then
+            VERSION=${GITHUB_REF#refs/tags/}
+          else
+            VERSION=$(git describe --tags --abbrev=0 2>/dev/null || echo "v0.1.0")
+          fi
+          
+          echo "version=$VERSION" >> $GITHUB_OUTPUT
+          
+          # Get previous version
+          if [[ "$VERSION" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
+            PREV_VERSION=$(git tag --sort=-version:refname | grep -A1 "^$VERSION$" | tail -1 || echo "")
+          else
+            PREV_VERSION=$(git describe --tags --abbrev=0 HEAD~1 2>/dev/null || echo "")
+          fi
+          
+          if [ -z "$PREV_VERSION" ]; then
+            # If no previous version, use first commit
+            PREV_VERSION=$(git rev-list --max-parents=0 HEAD)
+          fi
+          
+          echo "previous_version=$PREV_VERSION" >> $GITHUB_OUTPUT
+          echo "Current version: $VERSION"
+          echo "Previous version: $PREV_VERSION"
+
+      - name: Generate changelog content
+        id: changelog
+        run: |
+          VERSION="${{ steps.version.outputs.version }}"
+          PREV_VERSION="${{ steps.version.outputs.previous_version }}"
+          DATE=$(date +%Y-%m-%d)
+          
+          # Create temporary changelog file
+          TEMP_CHANGELOG=$(mktemp)
+          
+          echo "# Changelog" > $TEMP_CHANGELOG
+          echo "" >> $TEMP_CHANGELOG
+          echo "All notable changes to the NetBox Labs Documentation Hub will be documented in this file." >> $TEMP_CHANGELOG
+          echo "" >> $TEMP_CHANGELOG
+          echo "The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)," >> $TEMP_CHANGELOG
+          echo "and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html)." >> $TEMP_CHANGELOG
+          echo "" >> $TEMP_CHANGELOG
+          
+          if [ "${{ inputs.update_unreleased }}" = "true" ]; then
+            echo "## [Unreleased]" >> $TEMP_CHANGELOG
+            echo "" >> $TEMP_CHANGELOG
+          else
+            echo "## [Unreleased]" >> $TEMP_CHANGELOG
+            echo "" >> $TEMP_CHANGELOG
+            echo "## [$VERSION] - $DATE" >> $TEMP_CHANGELOG
+            echo "" >> $TEMP_CHANGELOG
+          fi
+          
+          # Get commits between versions
+          if [ "$PREV_VERSION" = "$(git rev-list --max-parents=0 HEAD)" ]; then
+            COMMITS=$(git log --pretty=format:"%H|%s|%an|%ae" --no-merges)
+          else
+            COMMITS=$(git log ${PREV_VERSION}..HEAD --pretty=format:"%H|%s|%an|%ae" --no-merges)
+          fi
+          
+          # Initialize sections
+          ADDED=""
+          CHANGED=""
+          DEPRECATED=""
+          REMOVED=""
+          FIXED=""
+          SECURITY=""
+          INFRASTRUCTURE=""
+          DOCUMENTATION=""
+          OTHER=""
+          
+          # Process commits
+          while IFS='|' read -r hash subject author email; do
+            if [ -z "$hash" ]; then continue; fi
+            
+            # Extract conventional commit type using sed instead of BASH_REMATCH
+            TYPE=""
+            SCOPE=""
+            DESCRIPTION="$subject"
+            
+            # Check if it matches conventional commit pattern
+            if echo "$subject" | grep -qE '^[a-z]+(\([^)]+\))?!?:\ '; then
+              TYPE=$(echo "$subject" | sed -E 's/^([a-z]+)(\([^)]+\))?!?:\ .*/\1/')
+              SCOPE=$(echo "$subject" | sed -E 's/^[a-z]+(\([^)]+\))?!?:\ .*/\1/' | sed 's/[()]//g')
+              DESCRIPTION=$(echo "$subject" | sed -E 's/^[a-z]+(\([^)]+\))?!?:\ (.*)/\2/')
+            fi
+            
+            # Format entry
+            SHORT_HASH=${hash:0:7}
+            ENTRY="- $DESCRIPTION ([${SHORT_HASH}](https://github.com/${GITHUB_REPOSITORY}/commit/${hash}))"
+            
+            if [ -n "$author" ] && [ "$author" != "github-actions[bot]" ]; then
+              ENTRY="$ENTRY by @${author}"
+            fi
+            
+            # Categorize by conventional commit type or keywords
+            case "$TYPE" in
+              "feat"|"feature")
+                ADDED="$ADDED$ENTRY\n"
+                ;;
+              "fix"|"bugfix")
+                FIXED="$FIXED$ENTRY\n"
+                ;;
+              "docs"|"doc")
+                DOCUMENTATION="$DOCUMENTATION$ENTRY\n"
+                ;;
+              "refactor"|"perf"|"style")
+                CHANGED="$CHANGED$ENTRY\n"
+                ;;
+              "build"|"ci"|"chore")
+                INFRASTRUCTURE="$INFRASTRUCTURE$ENTRY\n"
+                ;;
+              "revert")
+                REMOVED="$REMOVED$ENTRY\n"
+                ;;
+              "security"|"sec")
+                SECURITY="$SECURITY$ENTRY\n"
+                ;;
+              *)
+                # Categorize by keywords in subject
+                if [[ "$subject" =~ [Aa]dd|[Nn]ew|[Ii]ntroduc|[Ii]mplement ]]; then
+                  ADDED="$ADDED$ENTRY\n"
+                elif [[ "$subject" =~ [Ff]ix|[Rr]esolv|[Cc]orrect ]]; then
+                  FIXED="$FIXED$ENTRY\n"
+                elif [[ "$subject" =~ [Uu]pdat|[Ii]mprov|[Ee]nhanc|[Mm]odif ]]; then
+                  CHANGED="$CHANGED$ENTRY\n"
+                elif [[ "$subject" =~ [Rr]emov|[Dd]elet ]]; then
+                  REMOVED="$REMOVED$ENTRY\n"
+                elif [[ "$subject" =~ [Dd]oc|[Rr]eadme ]]; then
+                  DOCUMENTATION="$DOCUMENTATION$ENTRY\n"
+                elif [[ "$subject" =~ [Bb]uild|[Cc]i|[Dd]eploy|[Cc]hore ]]; then
+                  INFRASTRUCTURE="$INFRASTRUCTURE$ENTRY\n"
+                elif [[ "$subject" =~ [Ss]ecurity|[Vv]ulner ]]; then
+                  SECURITY="$SECURITY$ENTRY\n"
+                else
+                  OTHER="$OTHER$ENTRY\n"
+                fi
+                ;;
+            esac
+          done <<< "$COMMITS"
+          
+          # Write sections to changelog
+          if [ -n "$ADDED" ]; then
+            echo "### Added" >> $TEMP_CHANGELOG
+            echo "" >> $TEMP_CHANGELOG
+            echo -e "$ADDED" >> $TEMP_CHANGELOG
+          fi
+          
+          if [ -n "$CHANGED" ]; then
+            echo "### Changed" >> $TEMP_CHANGELOG
+            echo "" >> $TEMP_CHANGELOG
+            echo -e "$CHANGED" >> $TEMP_CHANGELOG
+          fi
+          
+          if [ -n "$DEPRECATED" ]; then
+            echo "### Deprecated" >> $TEMP_CHANGELOG
+            echo "" >> $TEMP_CHANGELOG
+            echo -e "$DEPRECATED" >> $TEMP_CHANGELOG
+          fi
+          
+          if [ -n "$REMOVED" ]; then
+            echo "### Removed" >> $TEMP_CHANGELOG
+            echo "" >> $TEMP_CHANGELOG
+            echo -e "$REMOVED" >> $TEMP_CHANGELOG
+          fi
+          
+          if [ -n "$FIXED" ]; then
+            echo "### Fixed" >> $TEMP_CHANGELOG
+            echo "" >> $TEMP_CHANGELOG
+            echo -e "$FIXED" >> $TEMP_CHANGELOG
+          fi
+          
+          if [ -n "$SECURITY" ]; then
+            echo "### Security" >> $TEMP_CHANGELOG
+            echo "" >> $TEMP_CHANGELOG
+            echo -e "$SECURITY" >> $TEMP_CHANGELOG
+          fi
+          
+          if [ -n "$DOCUMENTATION" ]; then
+            echo "### Documentation" >> $TEMP_CHANGELOG
+            echo "" >> $TEMP_CHANGELOG
+            echo -e "$DOCUMENTATION" >> $TEMP_CHANGELOG
+          fi
+          
+          if [ -n "$INFRASTRUCTURE" ]; then
+            echo "### Infrastructure" >> $TEMP_CHANGELOG
+            echo "" >> $TEMP_CHANGELOG
+            echo -e "$INFRASTRUCTURE" >> $TEMP_CHANGELOG
+          fi
+          
+          if [ -n "$OTHER" ]; then
+            echo "### Other" >> $TEMP_CHANGELOG
+            echo "" >> $TEMP_CHANGELOG
+            echo -e "$OTHER" >> $TEMP_CHANGELOG
+          fi
+          
+          # If existing CHANGELOG.md exists, preserve previous entries
+          if [ -f "CHANGELOG.md" ]; then
+            # Extract previous entries (everything after the first version section)
+            if [ "${{ inputs.update_unreleased }}" = "true" ]; then
+              # Replace only the unreleased section
+              awk '/^## \[Unreleased\]/{exit} {print}' CHANGELOG.md > temp_header.md
+              awk '/^## \[[0-9]/{found=1} found {print}' CHANGELOG.md > temp_versions.md
+              cat temp_header.md >> $TEMP_CHANGELOG
+              awk '/^## \[Unreleased\]/{skip=1; next} /^## \[/{skip=0} !skip {print}' $TEMP_CHANGELOG >> $TEMP_CHANGELOG.tmp
+              cat temp_versions.md >> $TEMP_CHANGELOG.tmp
+              mv $TEMP_CHANGELOG.tmp $TEMP_CHANGELOG
+              rm -f temp_header.md temp_versions.md
+            else
+              # Add new version entry
+              awk '/^## \[Unreleased\]/{print; print ""; getline; while(/^$/ || /^###/ || /^-/) {if(/^## \[/) break; getline}; print "## [Unreleased]"; print ""} /^## \[[0-9]/{found=1} found {print}' CHANGELOG.md >> $TEMP_CHANGELOG
+            fi
+          fi
+          
+          # Move temporary file to CHANGELOG.md
+          mv $TEMP_CHANGELOG CHANGELOG.md
+          
+          echo "temp_changelog=$TEMP_CHANGELOG" >> $GITHUB_OUTPUT
+
+      - name: Check for changes
+        id: changes
+        run: |
+          if [ -f "CHANGELOG.md" ]; then
+            git add CHANGELOG.md
+            if git diff --staged --quiet; then
+              echo "has_changes=false" >> $GITHUB_OUTPUT
+              echo "No changes to commit"
+            else
+              echo "has_changes=true" >> $GITHUB_OUTPUT
+              echo "Changes detected in CHANGELOG.md"
+            fi
+          else
+            echo "has_changes=true" >> $GITHUB_OUTPUT
+          fi
+
+      - name: Create pull request for protected branch
+        if: steps.changes.outputs.has_changes == 'true'
+        run: |
+          VERSION="${{ steps.version.outputs.version }}"
+          BRANCH_NAME="automated-changelog-update-$(date +%Y%m%d-%H%M%S)"
+          
+          # Create and switch to new branch
+          git checkout -b "$BRANCH_NAME"
+          
+          # Commit changes
+          if [ "${{ inputs.update_unreleased }}" = "true" ]; then
+            git commit -m "docs: update unreleased section in CHANGELOG.md" \
+                       -m "" \
+                       -m "- Automated changelog update for unreleased changes" \
+                       -m "- Generated from commit history using conventional commit parsing" \
+                       -m "- Added categorized change entries with commit links"
+          else
+            git commit -m "docs: add $VERSION entry to CHANGELOG.md" \
+                       -m "" \
+                       -m "- Automated changelog generation for version $VERSION" \
+                       -m "- Generated from commit history using conventional commit parsing" \
+                       -m "- Added categorized change entries with commit links" \
+                       -m "- Follows Keep a Changelog format"
+          fi
+          
+          # Push branch
+          git push origin "$BRANCH_NAME"
+          
+          # Create pull request
+          TITLE="📝 Automated Changelog Update"
+          if [ "${{ inputs.update_unreleased }}" = "true" ]; then
+            TITLE="$TITLE - Unreleased Changes"
+          else
+            TITLE="$TITLE - $VERSION"
+          fi
+          
+          BODY="## 🤖 Automated Changelog Generation"
+          BODY="$BODY"$'\n\n'"This PR contains automated updates to the project changelog."
+          BODY="$BODY"$'\n\n'"### Changes Include"$'\n\n'
+          
+          if [ "${{ inputs.update_unreleased }}" = "true" ]; then
+            BODY="$BODY""- 📋 **Updated unreleased section** with recent changes"
+          else
+            BODY="$BODY""- 📋 **Added changelog entry** for version \`$VERSION\`"
+          fi
+          
+          BODY="$BODY"$'\n'"- 🔗 **Commit links** for easy reference to specific changes"
+          BODY="$BODY"$'\n'"- 📝 **Categorized entries** following Keep a Changelog format"
+          BODY="$BODY"$'\n'"- ⚡ **Conventional commit parsing** for automatic categorization"
+          BODY="$BODY"$'\n\n'"### How It Works"$'\n\n'"The changelog is automatically generated by:"
+          BODY="$BODY"$'\n'"1. Analyzing git commit history since the last version"
+          BODY="$BODY"$'\n'"2. Parsing conventional commit messages (feat:, fix:, docs:, etc.)"
+          BODY="$BODY"$'\n'"3. Categorizing changes into appropriate sections"
+          BODY="$BODY"$'\n'"4. Adding commit links and author information"
+          BODY="$BODY"$'\n'"5. Following Keep a Changelog format guidelines"
+          BODY="$BODY"$'\n\n'"### Review Guidelines"$'\n\n'"- ✅ **Verify accuracy**: Check that categorization makes sense"
+          BODY="$BODY"$'\n'"- ✅ **Check formatting**: Ensure markdown renders correctly"
+          BODY="$BODY"$'\n'"- ✅ **Validate links**: Confirm commit links work properly"
+          BODY="$BODY"$'\n'"- ✅ **Content review**: Make sure no sensitive info is included"
+          BODY="$BODY"$'\n\n'"---"$'\n\n'"*This PR was automatically generated by the changelog automation workflow.*"
+          BODY="$BODY"$'\n'"*Triggered: $(date -u +%Y-%m-%dT%H:%M:%SZ)*"
+
+          gh pr create \
+            --title "$TITLE" \
+            --body "$BODY" \
+            --head "$BRANCH_NAME" \
+            --base master \
+            --label "documentation" \
+            --label "automated" \
+            --label "changelog"
+          
+          echo "Pull request created for changelog updates"
+        env:
+          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+      - name: Summary
+        if: always()
+        run: |
+          echo "## Changelog Generation Summary" >> $GITHUB_STEP_SUMMARY
+          echo "" >> $GITHUB_STEP_SUMMARY
+          echo "- **Version**: ${{ steps.version.outputs.version }}" >> $GITHUB_STEP_SUMMARY
+          echo "- **Previous Version**: ${{ steps.version.outputs.previous_version }}" >> $GITHUB_STEP_SUMMARY
+          echo "- **Changes Detected**: ${{ steps.changes.outputs.has_changes }}" >> $GITHUB_STEP_SUMMARY
+          
+          if [ "${{ steps.changes.outputs.has_changes }}" = "true" ]; then
+            echo "- **Action**: Pull request created for protected branch" >> $GITHUB_STEP_SUMMARY
+          else
+            echo "- **Action**: No changes required" >> $GITHUB_STEP_SUMMARY
+          fi
+          
+          echo "" >> $GITHUB_STEP_SUMMARY
+          echo "### Next Steps" >> $GITHUB_STEP_SUMMARY
+          echo "" >> $GITHUB_STEP_SUMMARY
+          if [ "${{ steps.changes.outputs.has_changes }}" = "true" ]; then
+            echo "1. Review the generated pull request" >> $GITHUB_STEP_SUMMARY
+            echo "2. Verify changelog accuracy and formatting" >> $GITHUB_STEP_SUMMARY
+            echo "3. Approve and merge when ready" >> $GITHUB_STEP_SUMMARY
+          else
+            echo "1. No action required - changelog is up to date" >> $GITHUB_STEP_SUMMARY
+          fi 
\ No newline at end of file
diff --git a/.github/workflows/manual-cleanup-automated-prs.yml b/.github/workflows/manual-cleanup-automated-prs.yml
new file mode 100644
index 00000000..ec866b06
--- /dev/null
+++ b/.github/workflows/manual-cleanup-automated-prs.yml
@@ -0,0 +1,144 @@
+name: Manual Cleanup - Automated Documentation PRs
+
+on:
+  workflow_dispatch:
+    inputs:
+      close_all:
+        description: 'Close all automated PRs (true) or just outdated ones (false)'
+        required: false
+        default: false
+        type: boolean
+      max_age_days:
+        description: 'Close automated PRs older than X days (0 = no age limit)'
+        required: false
+        default: 7
+        type: number
+
+jobs:
+  manual-cleanup:
+    runs-on: ubuntu-latest
+    permissions:
+      contents: read
+      pull-requests: write
+
+    steps:
+      - name: Checkout repository
+        uses: actions/checkout@v4
+
+      - name: Find and close automated PRs
+        uses: actions/github-script@v7
+        with:
+          script: |
+            const { data: prs } = await github.rest.pulls.list({
+              owner: context.repo.owner,
+              repo: context.repo.repo,
+              state: 'open',
+              base: 'master',
+              per_page: 100
+            });
+            
+            // Find automated documentation PRs
+            const automatedPRs = prs.filter(pr => 
+              pr.head.ref.startsWith('automated-docs-update') || 
+              pr.title.includes('🤖 Automated Documentation Updates')
+            );
+            
+            console.log("Found " + automatedPRs.length + " automated PRs");
+            
+            if (automatedPRs.length === 0) {
+              console.log('No automated PRs found');
+              return;
+            }
+            
+            const closeAll = '${{ inputs.close_all }}' === 'true';
+            const maxAgeDays = parseInt('${{ inputs.max_age_days }}');
+            const cutoffDate = maxAgeDays > 0 ? new Date(Date.now() - maxAgeDays * 24 * 60 * 60 * 1000) : null;
+            
+            console.log("Cleanup mode: " + (closeAll ? 'Close all' : 'Close outdated only'));
+            if (cutoffDate) {
+              console.log("Age cutoff: " + cutoffDate.toISOString() + " (" + maxAgeDays + " days ago)");
+            }
+            
+            let closedCount = 0;
+            let keptCount = 0;
+            
+            // Sort by creation date (newest first)
+            automatedPRs.sort((a, b) => new Date(b.created_at) - new Date(a.created_at));
+            
+            for (let i = 0; i < automatedPRs.length; i++) {
+              const pr = automatedPRs[i];
+              const prAge = new Date(pr.created_at);
+              let shouldClose = false;
+              let reason = '';
+              
+              if (closeAll) {
+                shouldClose = true;
+                reason = 'Manual cleanup - close all requested';
+              } else {
+                // Keep the newest PR unless it's too old
+                if (i === 0) {
+                  // This is the newest automated PR
+                  if (cutoffDate && prAge < cutoffDate) {
+                    shouldClose = true;
+                    reason = "Automated PR is older than " + maxAgeDays + " days";
+                  } else {
+                    reason = 'Keeping newest automated PR';
+                  }
+                } else {
+                  // This is an older PR
+                  shouldClose = true;
+                  reason = 'Superseded by newer automated PR';
+                }
+              }
+              
+              if (shouldClose) {
+                console.log("Closing PR #" + pr.number + ": " + reason);
+                
+                await github.rest.pulls.update({
+                  owner: context.repo.owner,
+                  repo: context.repo.repo,
+                  pull_number: pr.number,
+                  state: 'closed'
+                });
+                
+                await github.rest.issues.createComment({
+                  owner: context.repo.owner,
+                  repo: context.repo.repo,
+                  issue_number: pr.number,
+                  body: [
+                    "🧹 **Manual Cleanup**: " + reason,
+                    '',
+                    "This automated PR was closed as part of manual cleanup.",
+                    '',
+                    '**Cleanup Parameters:**',
+                    "- Close all: `" + closeAll + "`",
+                    "- Max age: `" + maxAgeDays + " days`",
+                    "- PR age: `" + Math.floor((Date.now() - prAge.getTime()) / (1000 * 60 * 60 * 24)) + " days`",
+                    '',
+                    '*Manual cleanup triggered via workflow dispatch.*'
+                  ].join('\n')
+                });
+                
+                closedCount++;
+              } else {
+                console.log("Keeping PR #" + pr.number + ": " + reason);
+                keptCount++;
+              }
+            }
+            
+            console.log("\n📊 Cleanup Summary:");
+            console.log("- Closed: " + closedCount + " PRs");
+            console.log("- Kept: " + keptCount + " PRs");
+            
+            // Set outputs for the summary
+            core.setOutput('closed_count', closedCount);
+            core.setOutput('kept_count', keptCount);
+
+      - name: Summary
+        run: |
+          echo "🧹 Manual cleanup completed"
+          echo "- Check logs above for detailed results"
+          echo ""
+          echo "Settings used:"
+          echo "- Close all: ${{ inputs.close_all }}"
+          echo "- Max age: ${{ inputs.max_age_days }} days" 
\ No newline at end of file
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
new file mode 100644
index 00000000..6a16ed20
--- /dev/null
+++ b/.github/workflows/release.yml
@@ -0,0 +1,136 @@
+name: Create Release
+
+on:
+  push:
+    tags:
+      - 'v*.*.*'
+      - 'v*.*.*-*'
+
+jobs:
+  create-release:
+    runs-on: ubuntu-latest
+    permissions:
+      contents: write
+      pull-requests: write
+      actions: read
+
+    steps:
+      - name: Checkout repository
+        uses: actions/checkout@v4
+        with:
+          fetch-depth: 0
+          token: ${{ secrets.GITHUB_TOKEN }}
+
+      - name: Extract version info
+        id: version
+        run: |
+          VERSION=${GITHUB_REF#refs/tags/}
+          echo "version=$VERSION" >> $GITHUB_OUTPUT
+          echo "version_name=${VERSION#v}" >> $GITHUB_OUTPUT
+          
+          # Check if this is a pre-release
+          if [[ "$VERSION" =~ -[a-zA-Z] ]]; then
+            echo "prerelease=true" >> $GITHUB_OUTPUT
+          else
+            echo "prerelease=false" >> $GITHUB_OUTPUT
+          fi
+          
+          echo "Version: $VERSION"
+          echo "Prerelease: $([ "$VERSION" =~ -[a-zA-Z] ] && echo true || echo false)"
+
+      - name: Trigger changelog generation
+        run: |
+          gh workflow run generate-changelog.yml \
+            --ref ${{ github.ref_name }} \
+            -f version="${{ steps.version.outputs.version }}" \
+            -f update_unreleased=false
+        env:
+          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+      - name: Wait for changelog generation
+        run: |
+          echo "Waiting for changelog generation to complete..."
+          sleep 30
+
+      - name: Extract release notes from changelog
+        id: release_notes
+        run: |
+          VERSION="${{ steps.version.outputs.version }}"
+          
+          # Create release notes from CHANGELOG.md
+          if [ -f "CHANGELOG.md" ]; then
+            # Extract the section for this version
+            RELEASE_NOTES=$(awk "/^## \\[$VERSION\\]/ { found=1; next } found && /^## \\[/ { exit } found && !/^\$/ { print }" CHANGELOG.md | sed '/^$/d' | head -50)
+            
+            if [ -z "$RELEASE_NOTES" ]; then
+              RELEASE_NOTES="### Changes in $VERSION"$'\n\n'"See the [full changelog](https://github.com/${{ github.repository }}/blob/master/CHANGELOG.md) for details."$'\n\n'"This release includes updates to the NetBox Labs Documentation Hub with improvements to documentation, infrastructure, and automated workflows."
+            fi
+          else
+            RELEASE_NOTES="### Changes in $VERSION"$'\n\n'"See the repository for details about this release."$'\n\n'"This release includes updates to the NetBox Labs Documentation Hub."
+          fi
+          
+          # Write to temporary file for multiline output
+          echo "$RELEASE_NOTES" > release_notes.txt
+          echo "release_notes_file=release_notes.txt" >> $GITHUB_OUTPUT
+
+      - name: Create GitHub Release
+        uses: ncipollo/release-action@v1
+        with:
+          tag: ${{ steps.version.outputs.version }}
+          name: "NetBox Labs Documentation Hub ${{ steps.version.outputs.version }}"
+          bodyFile: ${{ steps.release_notes.outputs.release_notes_file }}
+          draft: false
+          prerelease: ${{ steps.version.outputs.prerelease }}
+          generateReleaseNotes: true
+          makeLatest: ${{ steps.version.outputs.prerelease == 'false' }}
+          token: ${{ secrets.GITHUB_TOKEN }}
+
+      - name: Update documentation version references
+        if: steps.version.outputs.prerelease == 'false'
+        run: |
+          VERSION="${{ steps.version.outputs.version_name }}"
+          
+          # Update package.json version if it exists and differs
+          if [ -f "package.json" ]; then
+            CURRENT_VERSION=$(node -p "require('./package.json').version" 2>/dev/null || echo "")
+            if [ -n "$CURRENT_VERSION" ] && [ "$CURRENT_VERSION" != "$VERSION" ]; then
+              echo "Updating package.json version from $CURRENT_VERSION to $VERSION"
+              npm version "$VERSION" --no-git-tag-version --allow-same-version
+            fi
+          fi
+          
+          # Check if there are changes to commit
+          if ! git diff --quiet; then
+            git config user.name "github-actions[bot]"
+            git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
+            
+            git add -A
+            git commit -m "chore: update version references to $VERSION"
+            git push origin HEAD:master
+          fi
+
+      - name: Trigger documentation rebuild
+        run: |
+          # Trigger the documentation update workflow if it exists
+          if [ -f ".github/workflows/update-submodules.yml" ]; then
+            gh workflow run update-submodules.yml --ref master
+          fi
+        env:
+          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+      - name: Notify about release
+        run: |
+          echo "## 🚀 Release Created Successfully!" >> $GITHUB_STEP_SUMMARY
+          echo "" >> $GITHUB_STEP_SUMMARY
+          echo "- **Version**: ${{ steps.version.outputs.version }}" >> $GITHUB_STEP_SUMMARY
+          echo "- **Type**: $([ "${{ steps.version.outputs.prerelease }}" = "true" ] && echo "Pre-release" || echo "Stable release")" >> $GITHUB_STEP_SUMMARY
+          echo "- **Release URL**: https://github.com/${{ github.repository }}/releases/tag/${{ steps.version.outputs.version }}" >> $GITHUB_STEP_SUMMARY
+          echo "" >> $GITHUB_STEP_SUMMARY
+          echo "### What's Next?" >> $GITHUB_STEP_SUMMARY
+          echo "" >> $GITHUB_STEP_SUMMARY
+          echo "1. 📖 **Release notes** have been automatically generated" >> $GITHUB_STEP_SUMMARY
+          echo "2. 📝 **Changelog** has been updated with this version" >> $GITHUB_STEP_SUMMARY
+          echo "3. 🔄 **Documentation** rebuild has been triggered" >> $GITHUB_STEP_SUMMARY
+          if [ "${{ steps.version.outputs.prerelease }}" = "false" ]; then
+            echo "4. ✅ **Latest release** tag has been updated" >> $GITHUB_STEP_SUMMARY
+          fi 
\ No newline at end of file
diff --git a/.github/workflows/update-changelog-weekly.yml b/.github/workflows/update-changelog-weekly.yml
new file mode 100644
index 00000000..23b7c1f3
--- /dev/null
+++ b/.github/workflows/update-changelog-weekly.yml
@@ -0,0 +1,82 @@
+name: Update Unreleased Changelog
+
+on:
+  schedule:
+    # Run weekly on Mondays at 9 AM UTC
+    - cron: '0 9 * * 1'
+  workflow_dispatch:
+    inputs:
+      force_update:
+        description: 'Force update even if no new commits'
+        required: false
+        default: false
+        type: boolean
+
+jobs:
+  update-unreleased:
+    runs-on: ubuntu-latest
+    permissions:
+      contents: write
+      pull-requests: write
+
+    steps:
+      - name: Checkout repository
+        uses: actions/checkout@v4
+        with:
+          fetch-depth: 0
+          token: ${{ secrets.GITHUB_TOKEN }}
+
+      - name: Check for new commits since last update
+        id: check_commits
+        run: |
+          # Get the date of the last changelog update
+          LAST_UPDATE=""
+          if [ -f "CHANGELOG.md" ]; then
+            LAST_UPDATE=$(git log -1 --format=%ct --follow CHANGELOG.md 2>/dev/null || echo "0")
+          else
+            LAST_UPDATE="0"
+          fi
+          
+          # Get commits since last update
+          RECENT_COMMITS=$(git log --since="@$LAST_UPDATE" --oneline --no-merges | wc -l)
+          
+          echo "last_update_timestamp=$LAST_UPDATE" >> $GITHUB_OUTPUT
+          echo "recent_commits=$RECENT_COMMITS" >> $GITHUB_OUTPUT
+          echo "has_new_commits=$([ "$RECENT_COMMITS" -gt 0 ] && echo true || echo false)" >> $GITHUB_OUTPUT
+          
+          echo "Last changelog update: $(date -d @$LAST_UPDATE 2>/dev/null || echo 'Never')"
+          echo "Recent commits: $RECENT_COMMITS"
+
+      - name: Trigger changelog update
+        if: steps.check_commits.outputs.has_new_commits == 'true' || inputs.force_update == true
+        run: |
+          gh workflow run generate-changelog.yml \
+            --ref master \
+            -f update_unreleased=true
+          
+          echo "Triggered changelog update for unreleased section"
+          echo "Recent commits: ${{ steps.check_commits.outputs.recent_commits }}"
+        env:
+          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+      - name: Summary
+        if: always()
+        run: |
+          echo "## Weekly Changelog Update Summary" >> $GITHUB_STEP_SUMMARY
+          echo "" >> $GITHUB_STEP_SUMMARY
+          echo "- **Recent commits**: ${{ steps.check_commits.outputs.recent_commits }}" >> $GITHUB_STEP_SUMMARY
+          echo "- **Action taken**: $([ "${{ steps.check_commits.outputs.has_new_commits }}" = "true" ] || [ "${{ inputs.force_update }}" = "true" ] && echo "Triggered changelog update" || echo "No update needed")" >> $GITHUB_STEP_SUMMARY
+          echo "" >> $GITHUB_STEP_SUMMARY
+          
+          if [ "${{ steps.check_commits.outputs.has_new_commits }}" = "true" ] || [ "${{ inputs.force_update }}" = "true" ]; then
+            echo "### Next Steps" >> $GITHUB_STEP_SUMMARY
+            echo "" >> $GITHUB_STEP_SUMMARY
+            echo "1. 🔄 **Changelog workflow** has been triggered" >> $GITHUB_STEP_SUMMARY
+            echo "2. 📝 **Pull request** will be created automatically" >> $GITHUB_STEP_SUMMARY
+            echo "3. 👀 **Review the PR** when it's ready" >> $GITHUB_STEP_SUMMARY
+          else
+            echo "### Status" >> $GITHUB_STEP_SUMMARY
+            echo "" >> $GITHUB_STEP_SUMMARY
+            echo "✅ **No new commits** since last changelog update" >> $GITHUB_STEP_SUMMARY
+            echo "📋 **Changelog is up to date**" >> $GITHUB_STEP_SUMMARY
+          fi 
\ No newline at end of file
diff --git a/.github/workflows/update-submodules.yml b/.github/workflows/update-submodules.yml
new file mode 100644
index 00000000..e577c357
--- /dev/null
+++ b/.github/workflows/update-submodules.yml
@@ -0,0 +1,889 @@
+name: Update Documentation Submodules
+
+on:
+  schedule:
+    # Business hours: Every hour from 7 AM to 6 PM EST (12 PM to 11 PM UTC, Monday-Friday)
+    - cron: '0 12-23 * * 1-5'
+    # Off hours: Every 6 hours outside business hours
+    - cron: '0 0,6,12,18 * * 0,6'  # Weekends every 6 hours
+    - cron: '0 0,6 * * 1-5'        # Weekdays off-hours (midnight, 6 AM UTC)
+  workflow_dispatch:
+    inputs:
+      force_update:
+        description: 'Force update even if no changes detected'
+        required: false
+        default: false
+        type: boolean
+
+jobs:
+  update-submodules:
+    runs-on: ubuntu-latest
+    permissions:
+      contents: write
+      pull-requests: write
+      issues: write
+
+    steps:
+      - name: Checkout repository
+        uses: actions/checkout@v4
+        with:
+          submodules: 'recursive'
+          token: ${{ secrets.GITHUB_TOKEN }}
+          fetch-depth: 0
+
+      - name: Configure Git
+        run: |
+          git config user.name "github-actions[bot]"
+          git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
+
+      - name: Check for existing automated PRs
+        id: check-existing-prs
+        uses: actions/github-script@v7
+        with:
+          script: |
+            try {
+              const { data: prs } = await github.rest.pulls.list({
+                owner: context.repo.owner,
+                repo: context.repo.repo,
+                state: 'open',
+                base: 'master'
+              });
+              
+              // Find automated documentation PRs
+              const automatedPRs = prs.filter(pr => 
+                pr.head.ref.startsWith('automated-docs-update') || 
+                pr.title.includes('🤖 Automated Documentation Updates')
+              );
+              
+              console.log("Found " + automatedPRs.length + " existing automated PRs");
+              
+              if (automatedPRs.length > 0) {
+                const latestPR = automatedPRs[0]; // Most recent
+                if (latestPR && latestPR.number) {
+                  console.log("Latest automated PR: #" + latestPR.number + " - " + latestPR.title);
+                  core.setOutput('has_existing_pr', 'true');
+                  core.setOutput('existing_pr_number', latestPR.number.toString());
+                  core.setOutput('existing_pr_branch', latestPR.head.ref);
+                  
+                  // Close older automated PRs (keep only the latest)
+                  for (let i = 1; i < automatedPRs.length; i++) {
+                    const oldPR = automatedPRs[i];
+                    if (oldPR && oldPR.number) {
+                      console.log("Closing outdated automated PR #" + oldPR.number);
+                      try {
+                        await github.rest.pulls.update({
+                          owner: context.repo.owner,
+                          repo: context.repo.repo,
+                          pull_number: oldPR.number,
+                          state: 'closed'
+                        });
+                        await github.rest.issues.createComment({
+                          owner: context.repo.owner,
+                          repo: context.repo.repo,
+                          issue_number: oldPR.number,
+                          body: "🤖 **Auto-closed**: This automated PR has been superseded by a newer update (#" + latestPR.number + ")."
+                        });
+                      } catch (error) {
+                        console.log("Failed to close PR #" + oldPR.number + ": " + error.message);
+                      }
+                    }
+                  }
+                } else {
+                  console.log('Latest PR is missing required fields, treating as no existing PR');
+                  core.setOutput('has_existing_pr', 'false');
+                  core.setOutput('existing_pr_number', '');
+                  core.setOutput('existing_pr_branch', '');
+                }
+              } else {
+                core.setOutput('has_existing_pr', 'false');
+                core.setOutput('existing_pr_number', '');
+                core.setOutput('existing_pr_branch', '');
+              }
+            } catch (error) {
+              console.error('Error checking existing PRs:', error);
+              core.setOutput('has_existing_pr', 'false');
+              core.setOutput('existing_pr_number', '');
+              core.setOutput('existing_pr_branch', '');
+            }
+
+      - name: Check current submodule commits
+        id: check-before
+        run: |
+          echo "=== Checking current submodule commits ==="
+          
+          NETBOX_BEFORE=$(git ls-tree HEAD external-repos/netbox | awk '{print $3}' || echo "")
+          CONSOLE_BEFORE=$(git ls-tree HEAD external-repos/console-docs | awk '{print $3}' || echo "")
+          
+          echo "NetBox before: $NETBOX_BEFORE"
+          echo "Console before: $CONSOLE_BEFORE"
+          
+          # Validate output values before writing to GITHUB_OUTPUT
+          if [ -n "$NETBOX_BEFORE" ] && [ "$NETBOX_BEFORE" != "" ]; then
+            echo "netbox_before=$NETBOX_BEFORE" >> $GITHUB_OUTPUT
+          else
+            echo "netbox_before=undefined" >> $GITHUB_OUTPUT
+          fi
+          
+          if [ -n "$CONSOLE_BEFORE" ] && [ "$CONSOLE_BEFORE" != "" ]; then
+            echo "console_before=$CONSOLE_BEFORE" >> $GITHUB_OUTPUT
+          else
+            echo "console_before=undefined" >> $GITHUB_OUTPUT
+          fi
+
+      - name: Update submodules to latest
+        run: |
+          echo "=== Before submodule update ==="
+          git submodule status
+          git status --porcelain
+          echo "=== Running submodule update ==="
+          git submodule update --remote --merge
+          echo "=== After submodule update ==="
+          git submodule status
+          git status --porcelain
+          echo "=== Git diff for submodules ==="
+          git diff --name-only || true
+          
+      - name: Check updated submodule commits
+        id: check-after
+        run: |
+          echo "=== Checking updated submodule commits ==="
+          
+          NETBOX_AFTER=$(cd external-repos/netbox && git rev-parse HEAD 2>/dev/null || echo "")
+          CONSOLE_AFTER=$(cd external-repos/console-docs && git rev-parse HEAD 2>/dev/null || echo "")
+          
+          echo "NetBox after: $NETBOX_AFTER"
+          echo "Console after: $CONSOLE_AFTER"
+          
+          # Validate output values before writing to GITHUB_OUTPUT
+          if [ -n "$NETBOX_AFTER" ] && [ "$NETBOX_AFTER" != "" ]; then
+            echo "netbox_after=$NETBOX_AFTER" >> $GITHUB_OUTPUT
+          else
+            echo "netbox_after=undefined" >> $GITHUB_OUTPUT
+          fi
+          
+          if [ -n "$CONSOLE_AFTER" ] && [ "$CONSOLE_AFTER" != "" ]; then
+            echo "console_after=$CONSOLE_AFTER" >> $GITHUB_OUTPUT
+          else
+            echo "console_after=undefined" >> $GITHUB_OUTPUT
+          fi
+
+      - name: Debug GITHUB_OUTPUT contents
+        run: |
+          echo "=== GITHUB_OUTPUT contents ==="
+          cat $GITHUB_OUTPUT
+          echo "=== End GITHUB_OUTPUT ==="
+
+      - name: Detect changes
+        id: changes
+        run: |
+          NETBOX_CHANGED="false"
+          CONSOLE_CHANGED="false"
+          
+          echo "=== Change Detection Debug ==="
+          echo "NetBox before: ${{ steps.check-before.outputs.netbox_before }}"
+          echo "NetBox after:  ${{ steps.check-after.outputs.netbox_after }}"
+          echo "Console before: ${{ steps.check-before.outputs.console_before }}"
+          echo "Console after:  ${{ steps.check-after.outputs.console_after }}"
+          
+          if [ "${{ steps.check-before.outputs.netbox_before }}" != "${{ steps.check-after.outputs.netbox_after }}" ] && \
+             [ "${{ steps.check-before.outputs.netbox_before }}" != "undefined" ] && \
+             [ "${{ steps.check-after.outputs.netbox_after }}" != "undefined" ]; then
+            NETBOX_CHANGED="true"
+          fi
+          
+          if [ "${{ steps.check-before.outputs.console_before }}" != "${{ steps.check-after.outputs.console_after }}" ] && \
+             [ "${{ steps.check-before.outputs.console_before }}" != "undefined" ] && \
+             [ "${{ steps.check-after.outputs.console_after }}" != "undefined" ]; then
+            CONSOLE_CHANGED="true"
+          fi
+          
+          echo "NetBox changed: $NETBOX_CHANGED"
+          echo "Console changed: $CONSOLE_CHANGED"
+          echo "Force update: ${{ inputs.force_update }}"
+          
+          echo "netbox_changed=$NETBOX_CHANGED" >> $GITHUB_OUTPUT
+          echo "console_changed=$CONSOLE_CHANGED" >> $GITHUB_OUTPUT
+          
+          if [ "$NETBOX_CHANGED" = "true" ] || [ "$CONSOLE_CHANGED" = "true" ] || [ "${{ inputs.force_update }}" = "true" ]; then
+            echo "has_changes=true" >> $GITHUB_OUTPUT
+          else
+            echo "has_changes=false" >> $GITHUB_OUTPUT
+          fi
+
+      - name: Early exit notification for no changes
+        if: steps.changes.outputs.has_changes == 'false'
+        run: |
+          echo "✅ No submodule changes detected - workflow completing successfully"
+          echo "- NetBox: ${{ steps.check-before.outputs.netbox_before }} (unchanged)"
+          echo "- Console: ${{ steps.check-before.outputs.console_before }} (unchanged)"
+          echo "- Force update: ${{ inputs.force_update }}"
+
+      - name: Close existing automated PR if no changes
+        if: steps.changes.outputs.has_changes == 'false' && steps.check-existing-prs.outputs.has_existing_pr == 'true'
+        uses: actions/github-script@v7
+        with:
+          script: |
+            const prNumber = parseInt('${{ steps.check-existing-prs.outputs.existing_pr_number }}');
+            console.log("No changes detected - closing existing automated PR #" + prNumber);
+            
+            try {
+              await github.rest.pulls.update({
+                owner: context.repo.owner,
+                repo: context.repo.repo,
+                pull_number: prNumber,
+                state: 'closed'
+              });
+              
+              await github.rest.issues.createComment({
+                owner: context.repo.owner,
+                repo: context.repo.repo,
+                issue_number: prNumber,
+                body: "🤖 **Auto-closed**: No new documentation changes detected. All submodules are up to date."
+              });
+            } catch (error) {
+              console.log("Failed to close automated PR #" + prNumber + ": " + error.message);
+            }
+
+      - name: Setup Node.js
+        if: steps.changes.outputs.has_changes == 'true'
+        uses: actions/setup-node@v4
+        with:
+          node-version: '22'
+          cache: 'yarn'
+
+      - name: Install dependencies and handle submodule conflict
+        if: steps.changes.outputs.has_changes == 'true'
+        run: |
+          echo "=== Installing dependencies with submodule protection ==="
+          
+          # Save current submodule commits before yarn install
+          NETBOX_COMMIT="${{ steps.check-after.outputs.netbox_after }}"
+          CONSOLE_COMMIT="${{ steps.check-after.outputs.console_after }}"
+          
+          echo "Protecting commits - NetBox: $NETBOX_COMMIT, Console: $CONSOLE_COMMIT"
+          
+          # Store current git status for debugging
+          echo "=== Git status before yarn install ==="
+          git status --porcelain
+          git submodule status
+          
+          # Install dependencies (this WILL trigger postinstall and reset submodules)
+          echo "=== Running yarn install (will reset submodules) ==="
+          yarn install --frozen-lockfile
+          
+          # Verify postinstall reset occurred
+          echo "=== Git status after yarn install ==="
+          git status --porcelain
+          git submodule status
+          
+          # Restore submodules to the updated commits after installation
+          echo "=== Restoring submodules to updated commits ==="
+          
+          # Fetch all commits first to ensure they're available
+          cd external-repos/netbox
+          git fetch --all --tags
+          echo "NetBox: Checking out $NETBOX_COMMIT"
+          git checkout $NETBOX_COMMIT || (echo "Failed to checkout NetBox commit $NETBOX_COMMIT" && exit 1)
+          
+          cd ../console-docs
+          git fetch --all --tags
+          echo "Console: Checking out $CONSOLE_COMMIT"  
+          git checkout $CONSOLE_COMMIT || (echo "Failed to checkout Console commit $CONSOLE_COMMIT" && exit 1)
+          cd ../..
+          
+          # Verify final state and ensure we're in the right commits
+          NETBOX_FINAL=$(cd external-repos/netbox && git rev-parse HEAD)
+          CONSOLE_FINAL=$(cd external-repos/console-docs && git rev-parse HEAD)
+          
+          echo "=== Final verification ==="
+          echo "NetBox Final: $NETBOX_FINAL (expected: $NETBOX_COMMIT)"
+          echo "Console Final: $CONSOLE_FINAL (expected: $CONSOLE_COMMIT)"
+          
+          if [ "$NETBOX_FINAL" != "$NETBOX_COMMIT" ]; then
+            echo "❌ NetBox submodule restoration failed!"
+            echo "Expected: $NETBOX_COMMIT"
+            echo "Got: $NETBOX_FINAL"
+            exit 1
+          fi
+          
+          if [ "$CONSOLE_FINAL" != "$CONSOLE_COMMIT" ]; then
+            echo "❌ Console submodule restoration failed!"
+            echo "Expected: $CONSOLE_COMMIT"
+            echo "Got: $CONSOLE_FINAL"
+            exit 1
+          fi
+          
+          echo "✅ Submodules successfully protected and restored"
+          
+          # Final git status check
+          echo "=== Final git status ==="
+          git status --porcelain
+          git submodule status
+
+      - name: Analyze source documentation changes
+        if: steps.changes.outputs.has_changes == 'true'
+        id: analyze-source-changes
+        run: |
+          echo "=== Analyzing source documentation changes in submodules ==="
+          
+          # Initialize counters and lists
+          NETBOX_ADDED=0
+          NETBOX_MODIFIED=0
+          NETBOX_REMOVED=0
+          CONSOLE_ADDED=0
+          CONSOLE_MODIFIED=0
+          CONSOLE_REMOVED=0
+          
+          # Create temporary files for change lists
+          mkdir -p /tmp/source-changes
+          touch /tmp/source-changes/netbox-added.txt
+          touch /tmp/source-changes/netbox-modified.txt
+          touch /tmp/source-changes/netbox-removed.txt
+          touch /tmp/source-changes/console-added.txt
+          touch /tmp/source-changes/console-modified.txt
+          touch /tmp/source-changes/console-removed.txt
+          
+          # Analyze NetBox source documentation changes
+          if [ "${{ steps.changes.outputs.netbox_changed }}" = "true" ]; then
+            echo "Analyzing NetBox source documentation changes..."
+            
+            cd external-repos/netbox
+            
+            # Compare with previous commit to see what changed in docs/
+            BEFORE_COMMIT="${{ steps.check-before.outputs.netbox_before }}"
+            AFTER_COMMIT="${{ steps.check-after.outputs.netbox_after }}"
+            
+            echo "NetBox: Comparing $BEFORE_COMMIT..$AFTER_COMMIT in docs/"
+            
+            # Get added files in docs/
+            git diff --name-status $BEFORE_COMMIT..$AFTER_COMMIT -- docs/ | grep "^A" | cut -f2 | while read file; do
+              if [[ "$file" == *.md ]]; then
+                basename "$file" .md >> /tmp/source-changes/netbox-added.txt
+              fi
+            done
+            
+            # Get modified files in docs/
+            git diff --name-status $BEFORE_COMMIT..$AFTER_COMMIT -- docs/ | grep "^M" | cut -f2 | while read file; do
+              if [[ "$file" == *.md ]]; then
+                basename "$file" .md >> /tmp/source-changes/netbox-modified.txt
+              fi
+            done
+            
+            # Get removed files in docs/
+            git diff --name-status $BEFORE_COMMIT..$AFTER_COMMIT -- docs/ | grep "^D" | cut -f2 | while read file; do
+              if [[ "$file" == *.md ]]; then
+                basename "$file" .md >> /tmp/source-changes/netbox-removed.txt
+              fi
+            done
+            
+            cd ../..
+          fi
+          
+          # Analyze Console source documentation changes
+          if [ "${{ steps.changes.outputs.console_changed }}" = "true" ]; then
+            echo "Analyzing Console source documentation changes..."
+            
+            cd external-repos/console-docs
+            
+            # Compare with previous commit to see what changed in docs/ and overrides/
+            BEFORE_COMMIT="${{ steps.check-before.outputs.console_before }}"
+            AFTER_COMMIT="${{ steps.check-after.outputs.console_after }}"
+            
+            echo "Console: Comparing $BEFORE_COMMIT..$AFTER_COMMIT in docs/ and overrides/"
+            
+            # Get added files in docs/ and overrides/
+            git diff --name-status $BEFORE_COMMIT..$AFTER_COMMIT -- docs/ overrides/ | grep "^A" | cut -f2 | while read file; do
+              if [[ "$file" == *.md ]] || [[ "$file" == *.html ]]; then
+                basename "$file" | sed 's/\.[^.]*$//' >> /tmp/source-changes/console-added.txt
+              fi
+            done
+            
+            # Get modified files in docs/ and overrides/
+            git diff --name-status $BEFORE_COMMIT..$AFTER_COMMIT -- docs/ overrides/ | grep "^M" | cut -f2 | while read file; do
+              if [[ "$file" == *.md ]] || [[ "$file" == *.html ]]; then
+                basename "$file" | sed 's/\.[^.]*$//' >> /tmp/source-changes/console-modified.txt
+              fi
+            done
+            
+            # Get removed files in docs/ and overrides/
+            git diff --name-status $BEFORE_COMMIT..$AFTER_COMMIT -- docs/ overrides/ | grep "^D" | cut -f2 | while read file; do
+              if [[ "$file" == *.md ]] || [[ "$file" == *.html ]]; then
+                basename "$file" | sed 's/\.[^.]*$//' >> /tmp/source-changes/console-removed.txt
+              fi
+            done
+            
+            cd ../..
+          fi
+          
+          # Filter out empty lines if any
+          sed -i '/^$/d' /tmp/source-changes/*.txt 2>/dev/null || true
+          
+          # Count files
+          NETBOX_ADDED=$(wc -l < /tmp/source-changes/netbox-added.txt 2>/dev/null || echo "0")
+          NETBOX_MODIFIED=$(wc -l < /tmp/source-changes/netbox-modified.txt 2>/dev/null || echo "0") 
+          NETBOX_REMOVED=$(wc -l < /tmp/source-changes/netbox-removed.txt 2>/dev/null || echo "0")
+          CONSOLE_ADDED=$(wc -l < /tmp/source-changes/console-added.txt 2>/dev/null || echo "0")
+          CONSOLE_MODIFIED=$(wc -l < /tmp/source-changes/console-modified.txt 2>/dev/null || echo "0")
+          CONSOLE_REMOVED=$(wc -l < /tmp/source-changes/console-removed.txt 2>/dev/null || echo "0")
+          
+          echo "=== Source Change Summary ==="
+          echo "NetBox: +$NETBOX_ADDED ~$NETBOX_MODIFIED -$NETBOX_REMOVED"
+          echo "Console: +$CONSOLE_ADDED ~$CONSOLE_MODIFIED -$CONSOLE_REMOVED"
+          
+          # Validate and set outputs - ensure they're valid integers
+          NETBOX_ADDED_SAFE=$(echo "$NETBOX_ADDED" | grep -E '^[0-9]+$' || echo "0")
+          NETBOX_MODIFIED_SAFE=$(echo "$NETBOX_MODIFIED" | grep -E '^[0-9]+$' || echo "0")
+          NETBOX_REMOVED_SAFE=$(echo "$NETBOX_REMOVED" | grep -E '^[0-9]+$' || echo "0")
+          CONSOLE_ADDED_SAFE=$(echo "$CONSOLE_ADDED" | grep -E '^[0-9]+$' || echo "0")
+          CONSOLE_MODIFIED_SAFE=$(echo "$CONSOLE_MODIFIED" | grep -E '^[0-9]+$' || echo "0")
+          CONSOLE_REMOVED_SAFE=$(echo "$CONSOLE_REMOVED" | grep -E '^[0-9]+$' || echo "0")
+          
+          echo "netbox_added=$NETBOX_ADDED_SAFE" >> $GITHUB_OUTPUT
+          echo "netbox_modified=$NETBOX_MODIFIED_SAFE" >> $GITHUB_OUTPUT  
+          echo "netbox_removed=$NETBOX_REMOVED_SAFE" >> $GITHUB_OUTPUT
+          echo "console_added=$CONSOLE_ADDED_SAFE" >> $GITHUB_OUTPUT
+          echo "console_modified=$CONSOLE_MODIFIED_SAFE" >> $GITHUB_OUTPUT
+          echo "console_removed=$CONSOLE_REMOVED_SAFE" >> $GITHUB_OUTPUT
+
+      - name: Run documentation transformation
+        if: steps.changes.outputs.has_changes == 'true'
+        run: |
+          echo "=== Running documentation transformation ==="
+          yarn transform-docs
+          
+          echo "=== Verifying transformation output ==="
+          # Check that key directories exist
+          if [ ! -d "docs/netbox" ]; then
+            echo "❌ NetBox documentation not transformed - docs/netbox missing"
+            exit 1
+          fi
+          
+          if [ ! -d "docs/console" ]; then
+            echo "❌ Console documentation not transformed - docs/console missing"
+            exit 1
+          fi
+          
+          # Check that sidebars were generated
+          if [ ! -f "sidebars/netbox.json" ]; then
+            echo "❌ NetBox sidebar not generated"
+            exit 1
+          fi
+          
+          if [ ! -f "sidebars/console.json" ]; then
+            echo "❌ Console sidebar not generated"
+            exit 1
+          fi
+          
+          echo "✅ Documentation transformation completed successfully"
+          
+          # Show what files were generated/changed
+          echo "=== Files changed by transformation ==="
+          git status --porcelain | head -20
+
+      - name: Test build for Vercel compatibility
+        if: steps.changes.outputs.has_changes == 'true'
+        run: |
+          echo "=== Testing Docusaurus build ==="
+          # Test that the build works (this is what Vercel will run)
+          yarn build
+          
+          echo "✅ Build test successful - Vercel deployment should work"
+          
+          # Clean up build directory to avoid committing it
+          rm -rf build/
+
+      - name: Determine branch strategy
+        if: steps.changes.outputs.has_changes == 'true'
+        id: branch-strategy
+        run: |
+          if [ "${{ steps.check-existing-prs.outputs.has_existing_pr }}" = "true" ]; then
+            echo "strategy=update" >> $GITHUB_OUTPUT
+            echo "branch_name=${{ steps.check-existing-prs.outputs.existing_pr_branch }}" >> $GITHUB_OUTPUT
+            echo "pr_number=${{ steps.check-existing-prs.outputs.existing_pr_number }}" >> $GITHUB_OUTPUT
+          else
+            BRANCH_NAME="automated-docs-update-$(date +%Y%m%d)"
+            echo "strategy=create" >> $GITHUB_OUTPUT
+            echo "branch_name=$BRANCH_NAME" >> $GITHUB_OUTPUT
+          fi
+
+      - name: Checkout existing PR branch
+        if: steps.changes.outputs.has_changes == 'true' && steps.branch-strategy.outputs.strategy == 'update'
+        run: |
+          git fetch origin ${{ steps.branch-strategy.outputs.branch_name }}
+          git checkout ${{ steps.branch-strategy.outputs.branch_name }}
+          git rebase master
+
+      - name: Create new PR branch
+        if: steps.changes.outputs.has_changes == 'true' && steps.branch-strategy.outputs.strategy == 'create'
+        run: |
+          git checkout -b "${{ steps.branch-strategy.outputs.branch_name }}"
+
+      - name: Commit changes
+        id: commit
+        if: steps.changes.outputs.has_changes == 'true'
+        run: |
+          # Force stage submodule changes
+          git add external-repos/netbox external-repos/console-docs
+          # Stage all other changes
+          git add .
+          
+          # Check if there are actually changes to commit
+          if git diff --cached --quiet; then
+            echo "No changes to commit after transformation"
+            echo "changes_detected=false" >> $GITHUB_OUTPUT
+            exit 0
+          fi
+          
+          echo "changes_detected=true" >> $GITHUB_OUTPUT
+          
+          # Create detailed commit message with dynamic content
+          NETBOX_CHANGED="${{ steps.changes.outputs.netbox_changed }}"
+          CONSOLE_CHANGED="${{ steps.changes.outputs.console_changed }}"
+          
+          # Build title parts for commit message
+          TITLE_PARTS=""
+          if [ "$NETBOX_CHANGED" = "true" ]; then
+            TITLE_PARTS="NetBox"
+          fi
+          if [ "$CONSOLE_CHANGED" = "true" ]; then
+            if [ -n "$TITLE_PARTS" ]; then
+              TITLE_PARTS="$TITLE_PARTS + Console"
+            else
+              TITLE_PARTS="Console"
+            fi
+          fi
+          
+          # Create base commit message
+          if [ "${{ steps.branch-strategy.outputs.strategy }}" = "update" ]; then
+            COMMIT_MSG="chore: update automated documentation - $TITLE_PARTS"
+          else
+            COMMIT_MSG="chore: automated documentation updates - $TITLE_PARTS"
+          fi
+          
+          # Add detailed changes
+          if [ "$NETBOX_CHANGED" = "true" ]; then
+            NETBOX_SHORT_BEFORE="${{ steps.check-before.outputs.netbox_before }}"
+            NETBOX_SHORT_AFTER="${{ steps.check-after.outputs.netbox_after }}"
+            COMMIT_MSG="$COMMIT_MSG"$'\n\n'"- NetBox docs: ${NETBOX_SHORT_BEFORE:0:7} → ${NETBOX_SHORT_AFTER:0:7}"
+          fi
+          
+          if [ "$CONSOLE_CHANGED" = "true" ]; then
+            CONSOLE_SHORT_BEFORE="${{ steps.check-before.outputs.console_before }}"
+            CONSOLE_SHORT_AFTER="${{ steps.check-after.outputs.console_after }}"
+            COMMIT_MSG="$COMMIT_MSG"$'\n\n'"- Console docs: ${CONSOLE_SHORT_BEFORE:0:7} → ${CONSOLE_SHORT_AFTER:0:7}"
+          fi
+          
+          COMMIT_MSG="$COMMIT_MSG"$'\n\n'"Automated by GitHub Actions - includes transformed documentation files"
+          
+          git commit -m "$COMMIT_MSG"
+
+      - name: Early exit if no changes to commit
+        if: steps.changes.outputs.has_changes == 'true' && steps.commit.outputs.changes_detected == 'false'
+        run: echo "✅ No changes to commit. Exiting workflow."
+
+      - name: Push branch
+        if: steps.changes.outputs.has_changes == 'true' && steps.commit.outputs.changes_detected == 'true'
+        run: git push origin "${{ steps.branch-strategy.outputs.branch_name }}" --force-with-lease
+
+      - name: Create or Update Pull Request
+        if: steps.changes.outputs.has_changes == 'true' && steps.commit.outputs.changes_detected == 'true'
+        uses: actions/github-script@v7
+        with:
+          script: |
+            // Get the change status from workflow outputs
+            const netboxChanged = '${{ steps.changes.outputs.netbox_changed }}' === 'true';
+            const consoleChanged = '${{ steps.changes.outputs.console_changed }}' === 'true';
+            
+            console.log("NetBox changed: " + netboxChanged + ", Console changed: " + consoleChanged);
+            
+            // Get file change counts from source analysis
+            const netboxAdded = parseInt('${{ steps.analyze-source-changes.outputs.netbox_added }}') || 0;
+            const netboxModified = parseInt('${{ steps.analyze-source-changes.outputs.netbox_modified }}') || 0;
+            const netboxRemoved = parseInt('${{ steps.analyze-source-changes.outputs.netbox_removed }}') || 0;
+            const consoleAdded = parseInt('${{ steps.analyze-source-changes.outputs.console_added }}') || 0;
+            const consoleModified = parseInt('${{ steps.analyze-source-changes.outputs.console_modified }}') || 0;
+            const consoleRemoved = parseInt('${{ steps.analyze-source-changes.outputs.console_removed }}') || 0;
+            
+            console.log("Source file change counts:");
+            console.log("- NetBox: +" + netboxAdded + " ~" + netboxModified + " -" + netboxRemoved);
+            console.log("- Console: +" + consoleAdded + " ~" + consoleModified + " -" + consoleRemoved);
+            
+            // Build the PR body content
+            let netboxStatus = '';
+            let consoleStatus = '';
+            
+            if (netboxChanged) {
+              const netboxChangeSummary = "+" + netboxAdded + " ~" + netboxModified + " -" + netboxRemoved;
+              netboxStatus = "- ✅ **NetBox Documentation**: Updated from " + "${{ steps.check-before.outputs.netbox_before }}" + " to " + "${{ steps.check-after.outputs.netbox_after }}" + " (" + netboxChangeSummary + ")";
+            } else {
+              netboxStatus = '- ⚪ **NetBox Documentation**: No changes';
+            }
+            
+            if (consoleChanged) {
+              const consoleChangeSummary = "+" + consoleAdded + " ~" + consoleModified + " -" + consoleRemoved;
+              consoleStatus = "- ✅ **Console Documentation**: Updated from " + "${{ steps.check-before.outputs.console_before }}" + " to " + "${{ steps.check-after.outputs.console_after }}" + " (" + consoleChangeSummary + ")";
+            } else {
+              consoleStatus = '- ⚪ **Console Documentation**: No changes';
+            }
+            
+            // Build dynamic title based on what changed
+            let titleParts = [];
+            if (netboxChanged) titleParts.push('NetBox');
+            if (consoleChanged) titleParts.push('Console');
+            
+            const dynamicTitle = titleParts.length > 0 
+                ? "🤖 Automated Documentation Updates - " + titleParts.join(' + ')
+                : '🤖 Automated Documentation Updates';
+            
+            const isUpdate = '${{ steps.branch-strategy.outputs.strategy }}' === 'update';
+            const updateText = isUpdate ? ' (Updated)' : '';
+            
+            // Build detailed what's included section
+            let whatsIncluded = ['- 📚 Updated submodule references to latest commits'];
+            
+            if (netboxChanged || consoleChanged) {
+              whatsIncluded.push('- 🔄 Regenerated transformed documentation files');
+              whatsIncluded.push('- 🗂️ Updated sidebar configurations');
+              whatsIncluded.push('- 🖼️ Copied new/updated static assets');
+              
+              if (netboxChanged) {
+                whatsIncluded.push("- 📖 **NetBox docs**: Source files analyzed (" + (netboxAdded + netboxModified + netboxRemoved) + " changes)");
+              }
+              if (consoleChanged) {
+                whatsIncluded.push("- 🏢 **Console docs**: Source files analyzed (" + (consoleAdded + consoleModified + consoleRemoved) + " changes)");
+              }
+            }
+            
+            // Build detailed file changes section
+            let fileChangesSection = '';
+            
+            if (netboxChanged || consoleChanged) {
+              const { execSync } = require('child_process');
+              let fileChangesParts = [];
+              
+              if (netboxChanged && (netboxAdded > 0 || netboxModified > 0 || netboxRemoved > 0)) {
+                let netboxChanges = [];
+                
+                if (netboxAdded > 0) {
+                  try {
+                    const addedFiles = execSync('cat /tmp/source-changes/netbox-added.txt 2>/dev/null || echo ""', { encoding: 'utf8' }).trim();
+                    if (addedFiles) {
+                      const fileList = addedFiles.split('\n').filter(f => f.trim()).slice(0, 10);
+                      const moreText = addedFiles.split('\n').length > 10 ? " (+" + (addedFiles.split('\n').length - 10) + " more)" : '';
+                      netboxChanges.push("**Added (" + netboxAdded + "):** " + fileList.join(', ') + moreText);
+                    }
+                  } catch (e) {
+                    netboxChanges.push("**Added:** " + netboxAdded + " files");
+                  }
+                }
+                
+                if (netboxModified > 0) {
+                  try {
+                    const modifiedFiles = execSync('cat /tmp/source-changes/netbox-modified.txt 2>/dev/null || echo ""', { encoding: 'utf8' }).trim();
+                    if (modifiedFiles) {
+                      const fileList = modifiedFiles.split('\n').filter(f => f.trim()).slice(0, 10);
+                      const moreText = modifiedFiles.split('\n').length > 10 ? " (+" + (modifiedFiles.split('\n').length - 10) + " more)" : '';
+                      netboxChanges.push("**Modified (" + netboxModified + "):** " + fileList.join(', ') + moreText);
+                    }
+                  } catch (e) {
+                    netboxChanges.push("**Modified:** " + netboxModified + " files");
+                  }
+                }
+                
+                if (netboxRemoved > 0) {
+                  try {
+                    const removedFiles = execSync('cat /tmp/source-changes/netbox-removed.txt 2>/dev/null || echo ""', { encoding: 'utf8' }).trim();
+                    if (removedFiles) {
+                      const fileList = removedFiles.split('\n').filter(f => f.trim()).slice(0, 10);
+                      const moreText = removedFiles.split('\n').length > 10 ? " (+" + (removedFiles.split('\n').length - 10) + " more)" : '';
+                      netboxChanges.push("**Removed (" + netboxRemoved + "):** " + fileList.join(', ') + moreText);
+                    }
+                  } catch (e) {
+                    netboxChanges.push("**Removed:** " + netboxRemoved + " files");
+                  }
+                }
+                
+                if (netboxChanges.length > 0) {
+                  fileChangesParts.push("#### 📖 NetBox Documentation (Source Files)\n" + netboxChanges.join('\n'));
+                }
+              }
+              
+              if (consoleChanged && (consoleAdded > 0 || consoleModified > 0 || consoleRemoved > 0)) {
+                let consoleChanges = [];
+                
+                if (consoleAdded > 0) {
+                  try {
+                    const addedFiles = execSync('cat /tmp/source-changes/console-added.txt 2>/dev/null || echo ""', { encoding: 'utf8' }).trim();
+                    if (addedFiles) {
+                      const fileList = addedFiles.split('\n').filter(f => f.trim()).slice(0, 10);
+                      const moreText = addedFiles.split('\n').length > 10 ? " (+" + (addedFiles.split('\n').length - 10) + " more)" : '';
+                      consoleChanges.push("**Added (" + consoleAdded + "):** " + fileList.join(', ') + moreText);
+                    }
+                  } catch (e) {
+                    consoleChanges.push("**Added:** " + consoleAdded + " files");
+                  }
+                }
+                
+                if (consoleModified > 0) {
+                  try {
+                    const modifiedFiles = execSync('cat /tmp/source-changes/console-modified.txt 2>/dev/null || echo ""', { encoding: 'utf8' }).trim();
+                    if (modifiedFiles) {
+                      const fileList = modifiedFiles.split('\n').filter(f => f.trim()).slice(0, 10);
+                      const moreText = modifiedFiles.split('\n').length > 10 ? " (+" + (modifiedFiles.split('\n').length - 10) + " more)" : '';
+                      consoleChanges.push("**Modified (" + consoleModified + "):** " + fileList.join(', ') + moreText);
+                    }
+                  } catch (e) {
+                    consoleChanges.push("**Modified:** " + consoleModified + " files");
+                  }
+                }
+                
+                if (consoleRemoved > 0) {
+                  try {
+                    const removedFiles = execSync('cat /tmp/source-changes/console-removed.txt 2>/dev/null || echo ""', { encoding: 'utf8' }).trim();
+                    if (removedFiles) {
+                      const fileList = removedFiles.split('\n').filter(f => f.trim()).slice(0, 10);
+                      const moreText = removedFiles.split('\n').length > 10 ? " (+" + (removedFiles.split('\n').length - 10) + " more)" : '';
+                      consoleChanges.push("**Removed (" + consoleRemoved + "):** " + fileList.join(', ') + moreText);
+                    }
+                  } catch (e) {
+                    consoleChanges.push("**Removed:** " + consoleRemoved + " files");
+                  }
+                }
+                
+                if (consoleChanges.length > 0) {
+                  fileChangesParts.push("#### 🏢 Console Documentation (Source Files)\n" + consoleChanges.join('\n'));
+                }
+              }
+              
+              if (fileChangesParts.length > 0) {
+                fileChangesSection = [
+                  '',
+                  '### 📄 Detailed File Changes',
+                  '',
+                  '<details>',
+                  '<summary>Click to view specific file changes in source repositories</summary>',
+                  '',
+                  ...fileChangesParts,
+                  '',
+                  '</details>'
+                ].join('\n');
+              }
+            }
+            
+            const prBody = [
+              '## 🔄 Automated Submodule Updates' + updateText,
+              '',
+              'This PR contains automated updates to documentation submodules and their transformed content.',
+              '',
+              isUpdate ? "> **🔄 This PR was automatically updated on " + new Date().toISOString() + "**" : '',
+              '',
+              '### 📊 Changes Detected',
+              '',
+              netboxStatus,
+              '',
+              consoleStatus,
+              '',
+              '### 📦 What\'s Included',
+              '',
+              ...whatsIncluded,
+              fileChangesSection,
+              '',
+              '### Review Checklist',
+              '',
+              '- [ ] Check that new/updated documentation renders correctly',
+              '- [ ] Verify no broken links or missing images',
+              '- [ ] Confirm sidebar navigation is working properly',
+              '- [ ] Test build process completes successfully',
+              '',
+              '### Auto-merge Criteria',
+              '',
+              'This PR can be safely auto-merged if:',
+              '- [ ] All CI checks pass',
+              '- [ ] No conflicts with base branch',
+              '- [ ] Documentation transformation completed successfully',
+              '',
+              '---',
+              '',
+              '*This PR was automatically generated by the `update-submodules` GitHub Action.*',
+              "*Last updated: " + new Date().toISOString() + "*"
+            ].join('\n');
+
+            if (isUpdate) {
+              // Update existing PR
+              const prNumber = parseInt('${{ steps.branch-strategy.outputs.pr_number }}');
+              await github.rest.pulls.update({
+                owner: context.repo.owner,
+                repo: context.repo.repo,
+                pull_number: prNumber,
+                title: dynamicTitle,
+                body: prBody
+              });
+              
+              await github.rest.issues.createComment({
+                owner: context.repo.owner,
+                repo: context.repo.repo,
+                issue_number: prNumber,
+                body: "🤖 **Auto-updated** with latest documentation changes (" + new Date().toISOString() + ")"
+              });
+              
+              console.log("Updated existing PR #" + prNumber);
+            } else {
+              // Create new PR
+              const { data: pr } = await github.rest.pulls.create({
+                owner: context.repo.owner,
+                repo: context.repo.repo,
+                title: dynamicTitle,
+                head: '${{ steps.branch-strategy.outputs.branch_name }}',
+                base: 'master',
+                body: prBody,
+                draft: false
+              });
+
+              // Add labels with graceful error handling
+              try {
+                await github.rest.issues.addLabels({
+                  owner: context.repo.owner,
+                  repo: context.repo.repo,
+                  issue_number: pr.number,
+                  labels: ['documentation', 'automated', 'submodule-update']
+                });
+                console.log("Added labels to PR #" + pr.number);
+              } catch (error) {
+                if (error.message.includes('permission') || error.message.includes('unauthorized')) {
+                  console.warn('Skipping label creation: insufficient permissions. This is expected for some configurations.');
+                } else {
+                  console.error('Unexpected error adding labels:', error.message);
+                  // Don't fail the workflow for label issues
+                }
+              }
+
+              console.log("Created PR #" + pr.number + ": " + pr.html_url);
+            }
+
+      - name: Summary
+        if: always()
+        run: |
+          echo "=== Workflow Summary ==="
+          
+          HAS_CHANGES="${{ steps.changes.outputs.has_changes }}"
+          NETBOX_CHANGED="${{ steps.changes.outputs.netbox_changed }}"
+          CONSOLE_CHANGED="${{ steps.changes.outputs.console_changed }}"
+          FORCE_UPDATE="${{ inputs.force_update }}"
+          
+          echo "Has changes: $HAS_CHANGES"
+          echo "NetBox changed: $NETBOX_CHANGED"
+          echo "Console changed: $CONSOLE_CHANGED"
+          echo "Force update: $FORCE_UPDATE"
+          
+          if [ "$HAS_CHANGES" = "true" ]; then
+            echo "✅ Documentation updates detected and PR ${{ steps.branch-strategy.outputs.strategy }}d"
+            echo "- NetBox changed: $NETBOX_CHANGED"
+            echo "- Console changed: $CONSOLE_CHANGED"
+            echo "- Strategy: ${{ steps.branch-strategy.outputs.strategy }}"
+          else
+            echo "✅ No documentation changes detected - workflow completed successfully"
+            echo "- All submodules are up to date"
+            if [ "${{ steps.check-existing-prs.outputs.has_existing_pr }}" = "true" ]; then
+              echo "🧹 Closed existing automated PR as no changes were needed"
+            fi
+          fi 
\ No newline at end of file
diff --git a/.github/workflows/version-deploy.yml b/.github/workflows/version-deploy.yml
deleted file mode 100644
index a66bfec1..00000000
--- a/.github/workflows/version-deploy.yml
+++ /dev/null
@@ -1,107 +0,0 @@
-name: Deploy Documentation Version
-
-permissions:
-  contents: write
-  actions: read
-
-on:
-  push:
-    tags: ['v*']
-  workflow_dispatch:
-    inputs:
-      version:
-        description: 'Version to deploy (e.g., v1.11.2)'
-        required: true
-        type: string
-
-jobs:
-  deploy-version:
-    runs-on: ubuntu-latest
-    
-    steps:
-      - name: Checkout repository
-        uses: actions/checkout@v4
-        with:
-          fetch-depth: 0
-
-      - name: Set up Python
-        uses: actions/setup-python@v4
-        with:
-          python-version: '3.11'
-
-      - name: Install dependencies
-        run: |
-          python -m pip install --upgrade pip
-          pip install -r requirements.txt
-          pip install mike
-
-      - name: Extract version info
-        id: version
-        run: |
-          if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
-            VERSION="${{ github.event.inputs.version }}"
-          else
-            VERSION=${GITHUB_REF#refs/tags/}
-          fi
-          
-          # Extract major.minor from version (e.g., v1.11.2 -> v1.11)
-          MAJOR_MINOR=$(echo $VERSION | sed -E 's/^v([0-9]+\.[0-9]+)\.[0-9]+$/v\1/')
-          
-          echo "full_version=$VERSION" >> $GITHUB_OUTPUT
-          echo "major_minor=$MAJOR_MINOR" >> $GITHUB_OUTPUT
-          
-          # Determine if this is latest
-          LATEST_VERSION="v1.9"
-          if [ "$MAJOR_MINOR" == "$LATEST_VERSION" ]; then
-            echo "is_latest=true" >> $GITHUB_OUTPUT
-          else
-            echo "is_latest=false" >> $GITHUB_OUTPUT
-          fi
-
-      - name: Deploy with Mike
-        run: |
-          git config --global user.name "github-actions[bot]"
-          git config --global user.email "github-actions[bot]@users.noreply.github.com"
-          
-          VERSION="${{ steps.version.outputs.major_minor }}"
-          FULL_VERSION="${{ steps.version.outputs.full_version }}"
-          
-          # Deploy the version
-          if [ "${{ steps.version.outputs.is_latest }}" == "true" ]; then
-            mike deploy $VERSION latest --title="$VERSION (Latest)" --push --update-aliases
-            mike set-default latest --push
-          else
-            mike deploy $VERSION --title="$VERSION" --push
-          fi
-
-      - name: Trigger Dochub Integration
-        env:
-          DOCHUB_WEBHOOK_URL: ${{ secrets.DOCHUB_WEBHOOK_URL }}
-        run: |
-          if [ -n "$DOCHUB_WEBHOOK_URL" ]; then
-            curl -X POST "$DOCHUB_WEBHOOK_URL" \
-              -H "Content-Type: application/json" \
-              -d '{
-                "version": "${{ steps.version.outputs.major_minor }}",
-                "full_version": "${{ steps.version.outputs.full_version }}",
-                "repository": "console-docs",
-                "is_latest": ${{ steps.version.outputs.is_latest }}
-              }'
-          fi
-
-      - name: Create Release Notes
-        env:
-          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-        run: |
-          gh release create "${{ steps.version.outputs.full_version }}" \
-            --title "NetBox Enterprise Documentation ${{ steps.version.outputs.full_version }}" \
-            --notes "## NetBox Enterprise Documentation ${{ steps.version.outputs.full_version }}
-
-          Documentation for NetBox Enterprise ${{ steps.version.outputs.major_minor }}.
-
-          ### View Documentation
-          - [Latest Documentation](https://netboxlabs.com/docs/)
-          - [Version ${{ steps.version.outputs.major_minor }} Documentation](https://netboxlabs.com/docs/${{ steps.version.outputs.major_minor }}/)
-
-          ### Changes
-          This release includes documentation updates for NetBox Enterprise ${{ steps.version.outputs.full_version }}." 
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 3b1f4b6b..27cdfd22 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,18 +1,28 @@
-docs/images/.DS_Store
-.DS_Store
-venv/
-scratch/
+# Dependencies
+/node_modules
+
+# Production
+/build
+/src/components/global/options.data.ts
+/docs/*
+
+# Generated files
+.docusaurus
+.cache-loader
+logs/
 
-# MkDocs build output
-site/
+# Internal documentation (not for public deployment)
+# ai-reference/ - Commented out since it should be tracked in git but not deployed
+
+# Misc
+.DS_Store
+.env.local
+.env.development.local
+.env.test.local
+.env.production.local
 
-# Node.js dependencies
-node_modules/
 npm-debug.log*
 yarn-debug.log*
 yarn-error.log*
-yarn.lock
 
-# Package lock files (keep package-lock.json, ignore yarn.lock)
-# package-lock.json is kept for npm consistency
-CLAUDE.md
\ No newline at end of file
+!.gitkeep
\ No newline at end of file
diff --git a/.gitmodules b/.gitmodules
index e69de29b..61d186e8 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -0,0 +1,8 @@
+[submodule "external-repos/netbox"]
+	path = external-repos/netbox
+	url = https://github.com/netbox-community/netbox
+	branch = main
+[submodule "external-repos/console-docs"]
+	path = external-repos/console-docs
+	url = https://github.com/netboxlabs/console-docs/
+	branch = main
\ No newline at end of file
diff --git a/.nvmrc b/.nvmrc
new file mode 100644
index 00000000..67d9435f
--- /dev/null
+++ b/.nvmrc
@@ -0,0 +1 @@
+22.16.0 
\ No newline at end of file
diff --git a/.vscode/settings.json b/.vscode/settings.json
deleted file mode 100644
index 7a73a41b..00000000
--- a/.vscode/settings.json
+++ /dev/null
@@ -1,2 +0,0 @@
-{
-}
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 00000000..2562ddf8
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,88 @@
+# Changelog
+
+All notable changes to the NetBox Labs Documentation Hub will be documented in this file.
+
+The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
+and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+
+## [Unreleased]
+
+### Added
+
+- Initial changelog automation system with GitHub Actions workflow
+- Support for conventional commit parsing and automatic categorization
+- Integration with protected branch workflows via pull requests
+- Complete Discovery & Assurance navigation structure with all sub-sections
+- Enhanced workflow documentation with troubleshooting guides
+
+### Fixed
+
+- Critical submodule update workflow issue preventing PR creation
+- Submodule protection strategy to prevent postinstall script conflicts
+- Discovery & Assurance navigation now shows proper nested structure
+- Missing navbar items for NetBox Discovery Agent and NetBox Assurance sections
+
+### Infrastructure
+
+- Added comprehensive automated documentation update system
+- Implemented hourly submodule checking for NetBox and Console documentation
+- Created auto-merge workflows with branch protection compatibility
+- Added security vulnerability fixes for webpack-dev-server
+- Enhanced README with comprehensive developer documentation
+- Improved workflow reliability with better error handling and debugging
+
+### Documentation
+
+- Complete rewrite of README.md with developer-focused content
+- Added architecture diagrams and contribution guidelines
+- Created detailed setup instructions and troubleshooting guides
+- Added project structure documentation with visual indicators
+
+### Security
+
+- Fixed 8 moderate security vulnerabilities in webpack-dev-server
+- Updated all Docusaurus packages to latest secure versions
+- Added resolutions to force secure dependency versions
+
+## How to Use This Changelog
+
+This changelog is automatically generated from commit history and pull requests. Here's how to contribute:
+
+### For Contributors
+
+When making changes, use conventional commit messages for automatic categorization:
+
+- `feat:` for new features → **Added** section
+- `fix:` for bug fixes → **Fixed** section  
+- `docs:` for documentation → **Documentation** section
+- `security:` for security fixes → **Security** section
+- `refactor:`, `perf:`, `style:` for improvements → **Changed** section
+- `build:`, `ci:`, `chore:` for infrastructure → **Infrastructure** section
+
+### For Maintainers
+
+The changelog is automatically updated when:
+
+1. **New tags are pushed** - Creates a new version entry
+2. **Manual trigger** - Updates unreleased section or specific version
+3. **Pull requests are merged** - May trigger unreleased section updates
+
+### Release Process
+
+1. Ensure all changes are documented in the `[Unreleased]` section
+2. Create and push a new version tag (e.g., `v1.0.0`)
+3. The changelog workflow automatically creates a PR with the version entry
+4. Review and merge the changelog PR
+5. The version entry becomes part of the permanent changelog
+
+### Manual Updates
+
+For changes that don't fit the automatic categorization:
+
+1. Edit the `[Unreleased]` section manually
+2. Follow the Keep a Changelog format
+3. Use the appropriate category: **Added**, **Changed**, **Deprecated**, **Removed**, **Fixed**, **Security**
+
+---
+
+*This changelog is automatically maintained by GitHub Actions. Last updated: Initial version* 
\ No newline at end of file
diff --git a/PR_DESCRIPTION.md b/PR_DESCRIPTION.md
new file mode 100644
index 00000000..0519ecba
--- /dev/null
+++ b/PR_DESCRIPTION.md
@@ -0,0 +1 @@
+ 
\ No newline at end of file
diff --git a/README.md b/README.md
index bd3ecbb1..4754402b 100644
--- a/README.md
+++ b/README.md
@@ -1,342 +1,573 @@
-# ⚠️ DEPRECATED: NetBox Enterprise Documentation Repository
+# NetBox Labs Documentation Hub
 
-> **🚨 This repository is deprecated as of July 17, 2025**
-> 
-> **All documentation changes must now be made in the [netboxlabs-website-dochub](https://github.com/netboxlabs/netboxlabs-website-dochub) repository.**
-> 
-> **Changes made to this repository will NOT be published to the docs site.**
+This repository creates a unified documentation site for NetBox Labs products, accessible at [https://netboxlabs.com/docs/](https://netboxlabs.com/docs/). It consolidates documentation from multiple repositories into a single, cohesive Docusaurus-powered site.
 
-## 🔄 Where to Go Now
+## 🏗️ Architecture Overview
 
-| What you need to do | Where to do it |
-|-------------------|----------------|
-| **Edit Console/Cloud/Enterprise docs** | [netboxlabs-website-dochub](https://github.com/netboxlabs/netboxlabs-website-dochub) in `localdocs/console/` |
-| **Add new documentation** | [netboxlabs-website-dochub](https://github.com/netboxlabs/netboxlabs-website-dochub) in `localdocs/console/` |
-| **Update existing guides** | [netboxlabs-website-dochub](https://github.com/netboxlabs/netboxlabs-website-dochub) in `localdocs/console/` |
+This project implements a **unified documentation architecture** that brings together documentation from two primary sources:
 
-## 🚀 Quick Migration Guide
+### Documentation Sources
 
-### If you previously worked with this repository:
+1. **NetBox Community Documentation**
+   - **Source**: [`netbox-community/netbox`](https://github.com/netbox-community/netbox) repository (`docs/` directory)
+   - **Local Path**: `external-repos/netbox/docs/`
+   - **Output**: Transformed to `docs/netbox/`
+   - **Format**: MkDocs → Docusaurus MDX
 
-**Old workflow (DEPRECATED):**
-```bash
-# ❌ Don't do this anymore - changes won't be published
-git clone https://github.com/netboxlabs/console-docs
-# Edit files in docs/
-# Submit PR to console-docs
-# Wait for dochub integration
-```
+2. **NetBox Enterprise Documentation** 
+   - **Source**: [`netboxlabs/console-docs`](https://github.com/netboxlabs/console-docs) repository
+   - **Local Path**: `external-repos/console-docs/docs/`
+   - **Output**: Transformed to `docs/console/`
+   - **Format**: MkDocs → Docusaurus MDX
 
-**New workflow (CURRENT):**
-```bash
-# ✅ Do this instead
-git clone --recurse-submodules https://github.com/netboxlabs/netboxlabs-website-dochub
-cd netboxlabs-website-dochub
-yarn install && yarn dev
-# Edit files in localdocs/console/
-# Changes go live immediately after merge
+### Integration Flow
+
+```
+External Repos (MkDocs) → Git Submodules → Transformation Script → Docusaurus → Next.js Rewrites → netboxlabs.com/docs
 ```
 
-## 📍 New Documentation System
+## 🚀 Quick Start
 
-The documentation has moved to a **unified system** in the [netboxlabs-website-dochub](https://github.com/netboxlabs/netboxlabs-website-dochub) repository:
+### Prerequisites
+- Node.js 18+ 
+- Yarn (preferred package manager)
+- Git
 
-### What Changed
-- **Direct editing**: Edit documentation directly in `localdocs/console/`
-- **Immediate publishing**: Changes go live after merge (no two-step process)
-- **Unified system**: All NetBox documentation in one place
-- **Better development**: Live preview with `yarn dev`
+### Local Development Setup
 
-### File Location Mapping
-| Old Location (console-docs) | New Location (dochub) |
-|----------------------------|----------------------|
-| `docs/administration-console/` | `localdocs/console/administration-console/` |
-| `docs/cloud-connectivity/` | `localdocs/console/cloud-connectivity/` |
-| `docs/netbox-enterprise/` | `localdocs/console/netbox-enterprise/` |
-| `docs/netbox-assurance/` | `localdocs/console/netbox-assurance/` |
-| `docs/netbox-discovery/` | `localdocs/console/netbox-discovery/` |
-| `docs/netbox-integrations/` | `localdocs/console/netbox-integrations/` |
+1. **Clone with submodules**:
+   ```bash
+   git clone --recurse-submodules https://github.com/netboxlabs/netboxlabs-website-dochub.git
+   cd netboxlabs-website-dochub
+   ```
 
-## 🛠️ Getting Started with the New System
+2. **Install dependencies**:
+   ```bash
+   yarn install
+   ```
+   *Note: The `postinstall` script automatically initializes and updates git submodules*
+
+3. **Start development server**:
+   ```bash
+   yarn dev
+   ```
+   This will:
+   - Transform documentation from submodules
+   - Start Docusaurus dev server on `http://localhost:3001`
+   - Enable hot reloading for local changes
+
+### Production Build
 
-### 1. Clone the New Repository
 ```bash
-git clone --recurse-submodules https://github.com/netboxlabs/netboxlabs-website-dochub.git
-cd netboxlabs-website-dochub
+yarn build    # Creates static build in build/ directory
 ```
 
-### 2. Install Dependencies
-```bash
-yarn install
+## 🔄 How the Transformation Works
+
+The heart of this system is the **transformation pipeline** that converts MkDocs documentation to Docusaurus-compatible format:
+
+### 1. Git Submodules
+- `external-repos/console-docs` and `external-repos/netbox` are Git submodules
+- Automatically updated via `postinstall` script
+- Point to specific commits/branches of external repositories
+
+### 2. Transformation Script (`scripts/transformDocs.ts`)
+
+This TypeScript script performs several critical functions:
+
+**Content Processing:**
+- Converts MkDocs-specific markdown syntax to MDX
+- Transforms Material for MkDocs admonitions (notes, warnings, etc.)
+- Handles image references and file paths
+- Escapes special characters for React/MDX compatibility
+- Processes internal links and cross-references
+
+**File Operations:**
+- Recursively processes all markdown files
+- Copies static assets (images, etc.) preserving directory structure
+- Generates clean file structures in `docs/netbox/` and `docs/console/`
+
+**Sidebar Generation:**
+- Parses `mkdocs.yml` navigation structure
+- Converts to Docusaurus sidebar format
+- Outputs `sidebars/netbox.json` and `sidebars/console.json`
+- Maintains hierarchical navigation structure
+
+### 3. Docusaurus Integration
+- Uses transformed MDX files from `docs/` directory
+- Applies custom theme and styling from `src/theme/`
+- Leverages generated sidebars for navigation
+- Builds static site optimized for production
+
+### 4. Next.js Integration
+- Main NetBox Labs website (`netboxlabs.com`) uses URL rewrites
+- Documentation served seamlessly under `/docs/*` path
+- Provides unified user experience across all NetBox Labs properties
+
+## 📁 Project Structure
+
+```
+netboxlabs-website-dochub/
+├── docs/                          # 🎯 Transformed documentation (Docusaurus input)
+│   ├── console/                   # Transformed NetBox Enterprise docs
+│   └── netbox/                    # Transformed NetBox Community docs
+├── external-repos/                # 📚 Git submodules (source documentation)
+│   ├── console-docs/              # NetBox Enterprise docs submodule
+│   │   └── docs/                  # Original MkDocs source
+│   └── netbox/                    # NetBox Community docs submodule
+│       └── docs/                  # Original MkDocs source
+├── scripts/
+│   └── transformDocs.ts           # 🔄 Core transformation logic
+├── sidebars/                      # 🧭 Generated navigation
+│   ├── console.json               # Console documentation sidebar
+│   └── netbox.json                # NetBox documentation sidebar
+├── src/
+│   ├── css/                       # 🎨 Custom styles
+│   ├── pages/                     # Custom Docusaurus pages
+│   └── theme/                     # Theme customizations
+├── static/                        # Static assets
+├── docusaurus.config.ts           # ⚙️ Docusaurus configuration
+├── sidebars.ts                    # Sidebar imports and setup
+└── package.json                   # Dependencies and scripts
 ```
 
-### 3. Start Development
+## 👥 For Contributors
+
+### Contributing to External Documentation
+
+If you're contributing to the **NetBox** or **Console Documentation** repositories:
+
+#### NetBox Community Contributors
+- **Repository**: [`netbox-community/netbox`](https://github.com/netbox-community/netbox)
+- **Documentation Path**: `docs/` directory in the NetBox repo
+- **Format**: Standard MkDocs markdown
+- **Preview**: Changes appear in this unified site after submodule updates
+
+#### NetBox Enterprise Contributors  
+- **Repository**: [`netboxlabs/console-docs`](https://github.com/netboxlabs/console-docs)
+- **Documentation Path**: Root `docs/` directory
+- **Format**: MkDocs with Material theme extensions
+- **Preview**: Changes appear in this unified site after submodule updates
+
+#### Documentation Guidelines
+
+**Supported MkDocs Features:**
+- Standard markdown syntax
+- Material for MkDocs admonitions (`!!! note`, `!!! warning`, etc.)
+- Code blocks with syntax highlighting
+- Images and static assets
+- Internal linking
+- Navigation via `mkdocs.yml`
+
+**Limitations & Considerations:**
+- Complex MkDocs plugins may not translate perfectly
+- Custom HTML should be minimal and MDX-compatible
+- Image paths are preserved but copied to unified structure
+- Cross-references between NetBox/Console docs require careful path handling
+
+### Testing Documentation Changes
+
+#### For External Repo Contributors:
+1. Make changes in your respective repository
+2. Test locally in that repository first
+3. Submit PR to the external repository
+
+#### For Documentation Hub Maintainers:
+1. **Update submodules** to pull latest changes:
+   ```bash
+   git submodule update --remote
+   ```
+
+2. **Test transformation**:
+   ```bash
+   yarn transform-docs  # Run transformation only
+   yarn dev             # Full development workflow
+   ```
+
+3. **Review output** in `docs/netbox/` or `docs/console/`
+
+4. **Commit submodule updates**:
+   ```bash
+   git add external-repos/
+   git commit -m "Update documentation submodules"
+   ```
+
+## 🛠️ Development Workflows
+
+### Daily Development
+
 ```bash
+# Start development with fresh transformation
 yarn dev
-# Visit http://localhost:3001 to see changes live
-```
 
-### 4. Edit Documentation
-```bash
-# Edit files in localdocs/console/
-# Changes appear immediately in browser
-```
+# Transform docs only (after external changes)
+yarn transform-docs
 
-### 5. Commit and Push
-```bash
-git add .
-git commit -m "docs: update console documentation"
-git push
-# Changes go live after merge - no additional steps needed
+# Build for production testing
+yarn build
 ```
 
-## 📚 Reference Information
+### Updating External Documentation
 
-### 1. Local Development
 ```bash
-git clone https://github.com/netboxlabs/console-docs
-cd console-docs
-python3 -m venv venv
-source venv/bin/activate
-pip install -r requirements.txt
-mkdocs serve  # Visit http://127.0.0.1:8000
+# Update all submodules to latest
+git submodule update --remote
+
+# Update specific submodule
+cd external-repos/netbox
+git pull origin main
+cd ../..
+
+# Commit submodule updates
+git add external-repos/
+git commit -m "Update NetBox docs to latest"
 ```
 
-### 2. Write Documentation
-Create `.md` files in the `docs/` directory with proper frontmatter:
+### Troubleshooting
 
-```yaml
----
-tags:
-  - cloud                    # Edition availability
-  - enterprise
-  - administration           # Category
-  - getting-started          # Content type
-  - authentication           # Feature area
-  - sso                      # Specific feature
----
+**Common Issues:**
 
-# Your Documentation Title
+1. **Submodules not initialized**: Run `git submodule update --init --recursive`
+2. **Transformation errors**: Check `scripts/transformDocs.ts` output for specific file issues
+3. **Missing images**: Ensure image paths in source docs are relative and correct
+4. **Sidebar not updating**: Delete and regenerate with `yarn transform-docs`
 
-Your content here...
-```
+**GitHub Actions Issues:**
 
-### 3. Submit Changes
-```bash
-git checkout -b feature/your-feature-name
-git add docs/your-file.md
-git commit -m "Add documentation for feature"
-git push origin feature/your-feature-name
-# Create pull request
-```
+5. **Workflow not creating PRs**: 
+   - Check if external repos have new commits: `git submodule update --remote && git status`
+   - Verify workflow permissions in repository settings
+   - Look for "No changes detected" in workflow logs
+   - Try manual trigger with `force_update: true`
 
-## 📁 Repository Structure
+6. **PRs created but builds fail**:
+   - Check if `yarn build` works locally after `yarn transform-docs`
+   - Look for submodule restoration errors in workflow logs
+   - Verify Node.js version compatibility (requires >=22.0.0)
 
-```
-console-docs/
-├── docs/                           # 📝 Documentation content
-│   ├── administration-console/     # NetBox Cloud admin features  
-│   ├── cloud-connectivity/         # Cloud connectivity guides
-│   ├── netbox-assurance/          # NetBox Assurance documentation
-│   ├── netbox-discovery/          # NetBox Discovery documentation
-│   ├── netbox-enterprise/         # NetBox Enterprise guides
-│   ├── netbox-integrations/       # Third-party integrations
-│   └── netbox-cloud/              # NetBox Cloud migration
-├── ai-reference/                   # 🤖 AI development resources
-│   ├── README.md                   # AI reference system overview
-│   ├── QUICK_REFERENCE.md         # Quick lookup for common tasks
-│   ├── DISTRIBUTION_URLS.md       # Customer-facing URLs
-│   ├── content-strategy/          # Navigation & content strategy
-│   ├── project-docs/              # Project implementation details
-│   ├── reference-docs/            # Technical reference materials
-│   ├── style-guides/              # Writing and tagging guidelines
-│   └── templates/                 # Document templates
-├── mkdocs.yml                      # 🔧 Local development configuration
-└── README.md                       # 📖 This file
-```
+7. **Submodule conflicts in CI**:
+   - The workflow includes protection against `postinstall` script conflicts
+   - Check "Submodule Protection Strategy" logs for restoration failures
+   - Ensure submodule URLs are accessible from GitHub Actions
 
-## 🏷️ Documentation Standards
+**Debug Mode:**
+```bash
+# Enable verbose transformation logging
+DEBUG=true yarn transform-docs
+
+# Test workflow components locally
+git submodule update --remote
+yarn install --frozen-lockfile
+yarn transform-docs
+yarn build
+
+# Check submodule status
+git submodule status
+git diff --name-only
+```
 
-### Comprehensive Tagging System
+## 🚀 Deployment
 
-Our documentation uses a multi-tier tagging system for better organization and discovery:
+### Production Deployment
+- Hosted via Vercel (or similar platform)  
+- Automatic deployments on main branch changes
+- Submodule updates trigger rebuilds
+- Served under `netboxlabs.com/docs/` via Next.js rewrites
 
-#### Edition Tags (Prominent Pills)
-```yaml
-tags:
-  - cloud        # NetBox Cloud features
-  - enterprise   # NetBox Enterprise features  
-  - community    # NetBox Community (open source) features
-  - airgap       # Air-gapped deployments
+### Manual Deployment
+```bash
+yarn build
+# Deploy contents of build/ directory to your hosting provider
 ```
 
-#### Product Tags
-```yaml
-tags:
-  - netbox       # Core NetBox functionality
-  - discovery    # NetBox Discovery features
-  - assurance    # NetBox Assurance features
-  - operator     # NetBox Operator features
-```
+## 🤖 GitHub Actions Workflows
 
-#### Technical Category Tags
-```yaml
-tags:
-  - authentication  # Authentication and SSO
-  - administration  # System administration
-  - security       # Security features
-  - api           # API documentation
-  - integration   # Third-party integrations
-  - backup        # Backup and restore
-  - monitoring    # Monitoring and alerting
-```
+This repository uses several GitHub Actions workflows for automation. Here's a comprehensive overview:
 
-#### Content Type Tags
-```yaml
-tags:
-  - getting-started    # Introductory guides
-  - installation       # Setup procedures
-  - configuration      # Settings and customization
-  - troubleshooting    # Problem resolution
-  - reference         # Technical reference
-```
+### 🔄 Documentation Automation
 
-### Enhanced Frontmatter Format
+#### `update-submodules.yml` - **Automated Documentation Updates**
 
-```yaml
----
-title: "Document Title"
-description: "Brief description of the document"
-tags:
-  - cloud                    # Edition availability
-  - enterprise
-  - administration           # Category
-  - authentication           # Feature area
-  - sso                      # Specific feature
-  - configuration           # Content type
-author: "NetBox Labs Documentation Team"
-last_updated: "2025-01-02"
-versions:
-  netbox_cloud: "v1.10"
-  netbox_enterprise: "v1.10"
-category: "administration"
-audience: "administrators"
-complexity: "intermediate"
----
-```
+**🎯 Purpose**: Automatically detects when NetBox or Console documentation is updated and creates PRs with transformed content.
 
-## 🤖 AI Reference System
+**⏰ Schedule**: 
+- **Business hours**: Every hour (7 AM - 6 PM EST, Mon-Fri)
+- **Off hours**: Every 6 hours (nights/weekends)
+- **Manual trigger**: Available via GitHub Actions UI
 
-The `ai-reference/` directory contains comprehensive resources for AI-assisted documentation development. **These materials are still useful for reference** but should be applied in the new dochub repository.
-
-### Key Resources
-- **[AI Reference README](ai-reference/README.md)**: Complete system overview
-- **[Quick Reference](ai-reference/QUICK_REFERENCE.md)**: Common tasks and commands
-- **[Style Guides](ai-reference/style-guides/)**: Writing standards and guidelines
-- **[Templates](ai-reference/templates/)**: Document templates and examples
+**🔍 How It Works**:
 
-## 📦 Version Management
+1. **Submodule Check**: Compares current submodule commits vs latest remote commits
+2. **Change Detection**: Only proceeds if actual changes are detected
+3. **Dependency Installation**: Installs yarn dependencies with submodule protection
+4. **Documentation Transformation**: Runs `yarn transform-docs` to convert MkDocs → Docusaurus
+5. **PR Management**: Creates new PR or updates existing automated PR
+6. **File Analysis**: Provides detailed breakdown of added/modified/removed files
 
-### Current Version Strategy
-| Version | Status | Purpose |
-|---------|---------|---------|
-| **v1.9** | 🟢 **LIVE** | Current stable customer documentation |
-| **v1.10** | 🟡 **Beta** | Enterprise + Discovery/Assurance features |
-| **v1.11** | 🔴 **Future** | Upcoming features and improvements |
+**🛡️ Submodule Protection Strategy**:
+The workflow solves a critical issue where `yarn install` triggers a `postinstall` script that resets submodules:
+```bash
+# Problem: postinstall runs "git submodule update --init --recursive" 
+# This resets submodules to committed state, undoing remote updates
 
-### Version Guidelines
-- **Current customers**: Documentation on `main` branch (v1.9)
-- **New features**: Use feature branches until version branches are created
-- **Version compatibility**: Specify in frontmatter when relevant
+# Solution: Save commits → Install → Restore commits
+NETBOX_COMMIT="abc123..."     # Save updated commit
+yarn install --frozen-lockfile # Install (may reset submodules)  
+git checkout $NETBOX_COMMIT   # Restore to updated commit
+```
 
-## 🔄 Integration with DocHub
+**🚨 Common Failure Points**:
+- **Submodule conflicts**: Fixed by commit protection strategy above
+- **Missing GitHub permissions**: Requires `contents: write` and `pull-requests: write`
+- **Network timeouts**: Workflow includes retry logic for external API calls
+- **Change detection edge cases**: Extensive debugging output helps identify issues
+
+**🔧 Troubleshooting**:
+- **No PR created**: Check workflow logs for "No changes detected" or permission errors
+- **PR created but empty**: Look for submodule restoration failures in logs
+- **Build failures**: Check if transformation script errors are breaking the workflow
+- **Manual override**: Use workflow dispatch with `force_update: true`
+
+#### `auto-merge-docs.yml` - **Automated PR Merging**
+- **Trigger**: When automated documentation PRs are opened
+- **Purpose**: Safely auto-merges documentation updates after validation
+- **What it does**:
+  - Waits for Vercel deployment checks to pass
+  - Auto-approves PRs from `github-actions[bot]`
+  - Enables GitHub's auto-merge feature
+  - Provides clear status comments on PRs
+- **Safety**: Only merges if all deployment checks pass
+
+#### `cleanup-automated-prs.yml` - **PR Cleanup**
+- **Trigger**: When any PR is merged to master
+- **Purpose**: Cleans up redundant automated PRs after manual merges
+- **What it does**:
+  - Detects if merged PR contains submodule updates
+  - Compares automated PRs against new submodule versions
+  - Closes outdated automated PRs with explanatory comments
+  - Prevents accumulation of obsolete automation PRs
+
+#### `manual-cleanup-automated-prs.yml` - **Manual PR Management**
+- **Trigger**: Manual workflow dispatch only
+- **Purpose**: Provides manual control over automated PR cleanup
+- **What it does**:
+  - Lists all open automated documentation PRs
+  - Option to close all or just outdated PRs
+  - Configurable age-based cleanup (default: 7 days)
+  - Detailed cleanup summary and reporting
+
+### 📋 Release Management
+
+#### `release.yml` - **Automated Releases**
+- **Trigger**: When version tags (`v*.*.*`) are pushed
+- **Purpose**: Creates GitHub releases with auto-generated release notes
+- **What it does**:
+  - Extracts version info from git tags
+  - Generates release notes from commits since last version
+  - Creates GitHub release with proper categorization
+  - Supports both release and pre-release versions
+
+#### `generate-changelog.yml` - **Changelog Generation**
+- **Trigger**: Manual workflow dispatch
+- **Purpose**: Generates comprehensive changelogs following Keep a Changelog format
+- **What it does**:
+  - Analyzes commits between versions using conventional commit patterns
+  - Categorizes changes (Added, Changed, Fixed, etc.)
+  - Generates markdown changelog with links to commits
+  - Supports both full releases and unreleased sections
+
+#### `update-changelog-weekly.yml` - **Weekly Changelog Updates**
+- **Trigger**: Weekly schedule (Mondays at 9 AM UTC)
+- **Purpose**: Automatically updates unreleased changelog section
+- **What it does**:
+  - Tracks recent commits since last update
+  - Updates "Unreleased" section in CHANGELOG.md
+  - Creates PR with weekly documentation activity summary
+  - Helps maintain current changelog without manual effort
+
+### 🔧 Workflow Optimization & Best Practices
+
+#### **Redundancy Elimination**
+- ✅ **Removed**: `protected-branch-merge.yml` (superseded by `auto-merge-docs.yml`)
+- ✅ **Optimized**: Single auto-merge workflow prevents conflicts
+- ✅ **Smart Triggers**: Workflows only run when necessary
+
+#### **Performance Optimizations**
+- **Efficient Scheduling**: Business hours optimization for documentation updates
+- **Smart Caching**: Workflows use appropriate `fetch-depth` settings
+- **Conditional Execution**: Workflows skip unnecessary work when no changes detected
+
+#### **Error Handling & Recovery**
+- **Comprehensive Validation**: All `$GITHUB_OUTPUT` variables validated before use
+- **Graceful Fallbacks**: Branch protection compatibility with manual review options
+- **Debug Support**: Built-in debugging steps for troubleshooting
+
+#### **Security & Permissions**
+- **Minimal Permissions**: Each workflow requests only necessary permissions
+- **Bot Account Safety**: Automated actions clearly identified and scoped
+- **Safe Defaults**: Conservative auto-merge conditions with multiple validation checks
+
+### 📊 Workflow Dependencies
+
+```mermaid
+graph TD
+    A[External Repo Changes] --> B[update-submodules.yml]
+    B --> C[Creates/Updates PR]
+    C --> D[auto-merge-docs.yml]
+    D --> E[PR Merged]
+    E --> F[cleanup-automated-prs.yml]
+    
+    G[Manual Tag Push] --> H[release.yml]
+    H --> I[GitHub Release Created]
+    
+    J[Weekly Schedule] --> K[update-changelog-weekly.yml]
+    L[Manual Trigger] --> M[generate-changelog.yml]
+    L --> N[manual-cleanup-automated-prs.yml]
+```
 
-### What DocHub Handles
-- **Content Integration**: Combines docs from multiple repositories
-- **Site Building**: Transforms markdown to web pages using Docusaurus
-- **URL Management**: Creates customer-facing URLs
-- **Search**: Provides search functionality across all docs
-- **Navigation**: Generates unified navigation structure
-- **Tagging**: Processes semantic tags for content organization
+### 🚨 When to Use Manual Workflows
 
-### What This Repo Provides
-- **Source Content**: Raw documentation files with comprehensive metadata
-- **AI Reference Materials**: Development resources and guidelines
-- **Semantic Tagging**: Rich frontmatter for content organization
-- **Local Preview**: MkDocs for development testing
-- **Version Control**: Git history for documentation changes
+- **`manual-cleanup-automated-prs.yml`**: When automated PRs accumulate or need bulk cleanup
+- **`generate-changelog.yml`**: Before major releases or when updating project documentation
+- **`update-changelog-weekly.yml`**: Can be triggered manually if weekly run fails
 
-## 🌐 Distribution URLs
+### 🔧 Critical Workflow Design Details
 
-This repository provides content for several customer-facing distribution endpoints:
+#### **The Submodule vs Postinstall Conflict**
 
-### Customer Messages
-- **RSS Feed**: `https://netboxlabs.com/docs/feeds/customer-messages.xml`
-- **Purpose**: NetBox Enterprise console integration
+The biggest challenge in this workflow is handling a fundamental conflict:
 
-### NetBox Enterprise Helm Documentation
-- **Installation Guides**: `https://netboxlabs.com/docs/guides/helm/`
-- **Configuration Files**: `https://netboxlabs.com/docs/files/helm/`
-- **Values Template**: `https://netboxlabs.com/docs/files/helm/values-extra.yaml`
+1. **Workflow Goal**: Update submodules to latest remote commits (`git submodule update --remote`)
+2. **Postinstall Script**: Resets submodules to committed state (`git submodule update --init --recursive`)
+3. **The Problem**: `yarn install` triggers postinstall, undoing the remote updates
 
-For complete distribution URL documentation, see [ai-reference/DISTRIBUTION_URLS.md](ai-reference/DISTRIBUTION_URLS.md).
+#### **Solution: Commit Protection Strategy**
 
-## ⚠️ Important Notes
+```bash
+# Step 1: Update submodules to latest
+git submodule update --remote
+NETBOX_COMMIT=$(cd external-repos/netbox && git rev-parse HEAD)
+
+# Step 2: Install dependencies (this WILL reset submodules)
+yarn install --frozen-lockfile
+# ↑ Triggers postinstall: git submodule update --init --recursive
+# ↑ Resets NetBox to committed state (e.g., 334b45f)
+
+# Step 3: Restore to updated commits
+cd external-repos/netbox && git checkout $NETBOX_COMMIT
+# ↑ Restores NetBox to latest state (e.g., c660f1c)
+```
+
+#### **Why This Works for Vercel**
+
+- **Vercel Build Process**: Runs `yarn build` which includes `yarn update-submodules`
+- **Submodule Handling**: Vercel gets submodules at the committed state (expected behavior)
+- **No Conflicts**: Vercel doesn't need the `--remote` updates; it uses committed versions
+- **CI/CD Separation**: Workflow updates commits, Vercel builds from those commits
 
-- **Changes aren't live immediately** - requires dochub integration
-- **Use comprehensive tags** - helps with content organization and discovery
-- **Test locally** before submitting PRs with `mkdocs serve`
-- **Follow two-step process** for publishing
-- **Consult ai-reference** for detailed guidelines and templates
+#### **Workflow Reliability Features**
 
-## 🛠️ Troubleshooting
+1. **Comprehensive Verification**: Each step validates submodule states
+2. **Build Testing**: Tests full `yarn build` to ensure Vercel compatibility  
+3. **Error Handling**: Explicit failure modes with clear error messages
+4. **Debug Logging**: Tracks git status and submodule states throughout
 
-### Common Issues
-- **MkDocs theme errors**: Try `pip uninstall mkdocs && pip install -r requirements.txt`
-- **Changes not appearing**: Remember the two-step publishing process
-- **Local preview not working**: Check Python virtual environment is activated
-- **Tagging questions**: Consult [ai-reference/style-guides/](ai-reference/style-guides/)
+#### **PR Management Strategy**
 
-### Getting Help
-- **Documentation Issues**: Create an issue in this repository
-- **Publishing Questions**: Ask in the netboxlabs-website-dochub repository
-- **AI Reference**: Check [ai-reference/README.md](ai-reference/README.md) for comprehensive guidelines
-- **Community Support**: Join [NetBox Slack](https://netdev.chat/) #netbox channel
+The workflow implements intelligent PR management:
 
-## 🔍 Quality Assurance
+1. **Single Active PR**: Only one automated documentation PR exists at a time
+2. **PR Updates**: If changes occur during the run window, the existing PR is updated rather than creating new ones
+3. **Detailed Descriptions**: PRs include comprehensive file change analysis and commit details
+4. **Auto-Merge Ready**: PRs are structured for safe automatic merging with proper validation
 
-### Before Publishing
-- **Use proper tagging**: Follow the comprehensive tagging system
-- **Test locally**: Run `mkdocs serve` to verify content renders correctly
-- **Check frontmatter**: Ensure all required metadata is present
-- **Review guidelines**: Consult ai-reference materials for best practices
+**PR Update Process**:
+```bash
+# If existing automated PR found:
+git checkout existing-pr-branch
+git rebase master  # Bring up to date
+# Apply new changes
+git commit --amend  # Update existing commit
+git push --force-with-lease  # Update PR
+
+# If no existing PR:
+git checkout -b automated-docs-update-YYYYMMDD
+# Apply changes and create new PR
+```
 
-### Content Standards
-- **Professional technical writing** for network engineers
-- **Clear, concise language** without AI-generated patterns
-- **Tested procedures** with accurate examples
-- **Consistent formatting** following style guides
+### 🧪 Testing Workflow Changes
 
-## 🔄 Migration Support
+**Before modifying workflows**, test the core functionality locally:
 
-### Need Help Migrating?
-- **Read the dochub README**: [netboxlabs-website-dochub README](https://github.com/netboxlabs/netboxlabs-website-dochub#readme)
-- **Check the migration guide**: Available in the dochub repository
-- **Ask questions**: Create an issue in the dochub repository
+```bash
+# 1. Test submodule updates
+git submodule update --remote
+git status  # Should show changes in external-repos/
+
+# 2. Test the postinstall conflict
+cd external-repos/netbox && BEFORE=$(git rev-parse HEAD) && cd ../..
+yarn install --frozen-lockfile  # This will reset submodules
+cd external-repos/netbox && AFTER=$(git rev-parse HEAD) && cd ../..
+echo "Before: $BEFORE, After: $AFTER"  # Should be different
+
+# 3. Test restoration
+cd external-repos/netbox && git checkout $BEFORE && cd ../..
+# Should restore to updated commit
+
+# 4. Test full pipeline
+yarn transform-docs
+yarn build
+
+# 5. Test change detection logic
+git diff --name-only  # Should show docs/ changes
+git add . && git commit -m "test: workflow changes"
+
+# 6. Force trigger workflow (if needed)
+# Go to Actions → Update Documentation Submodules → Run workflow
+# Set force_update: true
+```
 
-### Common Migration Tasks
-1. **Move your branch**: No need to migrate - start fresh in dochub
-2. **Update bookmarks**: Point to netboxlabs-website-dochub repository
-3. **Update documentation**: Reference the new workflow in team processes
-4. **Transfer knowledge**: Share the new process with team members
-
-## ⚠️ Final Reminders
-
-- **❌ This repository is READ-ONLY** for documentation purposes
-- **❌ PRs to this repository will NOT be published**
-- **✅ All changes must go to [netboxlabs-website-dochub](https://github.com/netboxlabs/netboxlabs-website-dochub)**
-- **✅ The new system is faster and more efficient**
+**Workflow Testing Checklist**:
+- [ ] Submodules update correctly with `--remote`
+- [ ] Postinstall resets submodules (expected behavior)
+- [ ] Restoration brings submodules back to updated commits
+- [ ] Transformation completes without errors  
+- [ ] Build succeeds after transformation
+- [ ] Change detection identifies modified files
+- [ ] Local git operations work as expected
+
+## 📋 Key Commands Reference
+
+| Command | Description |
+|---------|-------------|
+| `yarn dev` | Start development server with transformation |
+| `yarn build` | Build production site |
+| `yarn transform-docs` | Run documentation transformation only |
+| `yarn start` | Serve built site locally |
+| `git submodule update --remote` | Update all submodules |
+| `git submodule update --init --recursive` | Initialize submodules |
+
+## 🤝 Contributing to This Repository
+
+### Development Preferences
+- **Package Manager**: Use Yarn (not npm) - no `package-lock.json` files
+- **Language**: Prefer TypeScript over JavaScript for new code
+- **Code Style**: Follow existing patterns in the codebase
+
+### Making Changes
+1. Fork this repository
+2. Create feature branch: `git checkout -b feature/description`
+3. Test changes locally: `yarn dev`
+4. Update documentation if needed
+5. Submit pull request
+
+## 📞 Support
+
+- **NetBox Community**: [NetBox Discussions](https://github.com/netbox-community/netbox/discussions)
+- **NetBox Enterprise**: [NetBox Labs Support](https://netboxlabs.com/support/)
+- **Documentation Issues**: Open issues in respective repositories
+- **Site Issues**: Open issues in this repository
 
 ---
 
-**Ready to get started?** Head over to [netboxlabs-website-dochub](https://github.com/netboxlabs/netboxlabs-website-dochub) and follow the quick start guide!
\ No newline at end of file
+This unified documentation system ensures that all NetBox-related documentation is easily discoverable and accessible from a single location while maintaining the flexibility for teams to work in their preferred repositories and formats.
diff --git a/ai-reference/QUICK_REFERENCE.md b/ai-reference/QUICK_REFERENCE.md
new file mode 100644
index 00000000..357d2f01
--- /dev/null
+++ b/ai-reference/QUICK_REFERENCE.md
@@ -0,0 +1,191 @@
+---
+tags:
+  - ai-reference
+  - quick-reference
+  - templates
+  - development
+author: "NetBox Labs Documentation Team"
+last_updated: "2025-01-27"
+category: "ai-reference"
+audience: "developers"
+complexity: "beginner"
+description: "Quick reference guide for common AI reference tasks"
+internal_only: true
+draft: true
+---
+
+# AI Reference Quick Reference
+
+## 🚀 Common Tasks
+
+### Writing New Documentation
+```bash
+# 1. Choose template
+templates/netbox-feature-doc-template.md    # Feature docs
+templates/product-landing-page.md           # Product overviews
+
+# 2. Reference style guide
+style-guides/netbox-docs-style-guide.md
+
+# 3. Apply proper tags
+# See tag reference below
+```
+
+### Understanding Navigation
+```bash
+# Strategy and principles
+content-strategy/navigation-guidelines.md
+
+# System overview
+SYSTEM_OVERVIEW.md
+```
+
+### AI-Assisted Writing
+```bash
+# Best practices
+style-guides/ai-prompting-guide.md (to be added)
+
+# Template examples
+templates/netbox-feature-doc-template.md
+
+# Complete style reference
+style-guides/netbox-docs-style-guide.md
+```
+
+## 🏷️ Tag Reference
+
+### Edition Tags (Prominent Pills)
+| Tag | Usage | Color |
+|-----|-------|-------|
+| `cloud` | NetBox Cloud features | #00d9be |
+| `enterprise` | NetBox Enterprise features | #ffac00 |
+| `community` | Open source features | #00bee0 |
+| `airgap` | Air-gapped deployments | #6c757d |
+
+### Product Tags (Regular)
+| Tag | Usage |
+|-----|-------|
+| `netbox` | Core NetBox functionality |
+| `discovery` | Network discovery features |
+| `assurance` | Network monitoring capabilities |
+| `operator` | AI-powered network operations |
+| `branching` | NetBox Branching extension |
+
+### Common Semantic Tags
+- **Auth**: `authentication`, `sso`, `ldap`, `saml`, `rbac`
+- **Security**: `security`, `encryption`, `certificates`
+- **Database**: `database`, `backup`, `migration`, `upgrade`
+- **APIs**: `rest-api`, `graphql`, `webhooks`, `automation`
+- **UX**: `getting-started`, `installation`, `configuration`
+
+## 🎨 Frontmatter Templates
+
+### Standard Document
+```yaml
+---
+tags:
+  - cloud                    # Edition (prominent)
+  - enterprise
+  - discovery                # Product (regular)
+  - authentication           # Semantic (regular)
+title: "Document Title"
+description: "SEO description"
+author: "NetBox Labs Documentation Team"
+last_updated: "2025-01-27"
+versions:
+  cloud: "v1.10"
+  enterprise: "v1.10"
+  community: "v4.2"
+status: "current"
+category: "feature"
+audience: "end-users"
+complexity: "beginner"
+---
+```
+
+### Premium Feature (Cloud/Enterprise Only)
+```yaml
+---
+tags:
+  - cloud
+  - enterprise
+  - assurance                # Premium product
+  - monitoring
+title: "NetBox Assurance Feature"
+versions:
+  cloud: "v1.10"
+  enterprise: "v1.10"
+  # Note: community not included
+---
+```
+
+### Universal Feature (All Editions)
+```yaml
+---
+tags:
+  - cloud
+  - enterprise
+  - community
+  - discovery                # Available everywhere
+title: "NetBox Discovery Feature"
+versions:
+  cloud: "v1.10"
+  enterprise: "v1.10"
+  community: "v4.2"
+---
+```
+
+## 🔧 Development Commands
+
+```bash
+# Update source materials
+git submodule update --remote
+
+# Transform all documentation
+yarn transform-docs
+
+# Start development server
+yarn dev
+
+# Build for production
+yarn build
+```
+
+## 📁 File Finder
+
+### Need to...
+| Task | File |
+|------|------|
+| Write feature docs | `templates/netbox-feature-doc-template.md` |
+| Create product page | `templates/product-landing-page.md` |
+| Follow style guide | `style-guides/netbox-docs-style-guide.md` |
+| Understand navigation | `content-strategy/navigation-guidelines.md` |
+| System overview | `SYSTEM_OVERVIEW.md` |
+| This quick reference | `QUICK_REFERENCE.md` |
+| DocHub integration details | `reference-docs/dochub-integration-summary.md` |
+| Workflow troubleshooting | `reference-docs/workflow-fixes.md` |
+
+## ⚡ Quick Checks
+
+### Before Writing
+- [ ] Template selected
+- [ ] Style guide reviewed
+- [ ] Tags identified
+- [ ] Version mapping confirmed
+
+### Before Publishing
+- [ ] Frontmatter complete
+- [ ] Tags applied correctly
+- [ ] Version information accurate
+- [ ] Internal notices removed (if public)
+
+### For AI Prompts
+- [ ] Context provided from relevant files
+- [ ] Style guide referenced
+- [ ] Tag system explained
+- [ ] Version requirements specified
+
+---
+
+**Quick Reference** | **Last Updated**: 2025-01-27  
+**For comprehensive information**: See [README.md](./README.md) and [SYSTEM_OVERVIEW.md](./SYSTEM_OVERVIEW.md) 
\ No newline at end of file
diff --git a/ai-reference/README.md b/ai-reference/README.md
new file mode 100644
index 00000000..b81dbf68
--- /dev/null
+++ b/ai-reference/README.md
@@ -0,0 +1,243 @@
+---
+tags:
+  - cloud
+  - enterprise
+  - community
+  - ai-reference
+  - assurance
+  - discovery
+  - operator
+  - template
+  - style-guide
+  - reference
+  - strategy
+  - ai-tools
+  - authentication
+  - tagging
+  - navigation
+  - documentation
+author: NetBox Labs Documentation Team
+last_updated: '2025-01-27'
+versions:
+  cloud: v1.10
+  enterprise: v1.10
+  community: v4.2
+status: current
+category: ai-reference
+audience: developers
+complexity: intermediate
+sidebar_position: 999
+description: AI Reference material for NetBox Labs documentation development
+internal_only: true
+draft: true
+---
+
+# AI Reference Materials
+
+This directory contains reference materials, templates, and documentation resources for use with AI/LLM tools when building NetBox Labs documentation. **This directory is not published to the live site** and is intended for internal development use only.
+
+## Purpose
+
+- 📝 Store reference documentation and examples for AI-assisted writing
+- 🤖 Provide context and templates for LLM tools using our comprehensive frontmatter system
+- 📋 Maintain style guides and content patterns with version tracking
+- 🔧 Keep development notes and content strategy documents
+- 🏷️ Demonstrate proper use of our enhanced frontmatter tagging and versioning system
+
+## Structure
+
+```
+ai-reference/
+├── README.md                           # This file - comprehensive guide
+├── SYSTEM_OVERVIEW.md                  # Complete system documentation
+├── QUICK_REFERENCE.md                  # Fast lookup guide
+├── templates/                          # Document templates using enhanced frontmatter
+│   ├── netbox-feature-doc-template.md  # Standard feature documentation template
+│   ├── product-landing-page.md         # Landing page template (like NetBox Operator)
+│   └── semantic-tagging-usage.md       # Tag usage examples
+├── style-guides/                       # Writing style and formatting guidelines
+│   ├── netbox-docs-style-guide.md      # Complete style guide with enhanced frontmatter
+│   ├── product-tagging-guide.md        # Complete product tagging system documentation
+│   └── ai-prompting-guide.md           # Best practices for AI assistance with version tracking
+├── content-strategy/                   # Strategy docs and planning materials
+│   ├── navigation-guidelines.md        # Our navigation restructuring approach
+│   └── version-management.md           # How we handle versions and releases
+└── reference-docs/                     # External reference materials and authoritative sources
+    ├── dochub-integration-summary.md   # Complete DocHub integration implementation summary
+    ├── workflow-fixes.md               # GitHub Actions workflow fixes and troubleshooting
+    ├── semantic-tagging-system.md      # Comprehensive semantic tagging system documentation (to be added)
+    └── dochub-integration-requirements.md # Detailed technical implementation requirements (to be added)
+```
+
+## Enhanced Frontmatter System
+
+We use **comprehensive YAML frontmatter** with version tracking for better organization and AI context:
+
+### Complete Frontmatter Format
+```yaml
+---
+tags:
+  - cloud                    # Edition tags (display as prominent pills)
+  - enterprise
+  - community
+  - discovery                # Product tags (display as regular tags)
+  - assurance
+  - authentication           # Semantic tags (display as smaller tags)
+  - sso
+title: "Document Title"
+description: "SEO-friendly description for search and social sharing"
+author: "Author Name or NetBox Labs Documentation Team"
+last_updated: "YYYY-MM-DD"
+versions:
+  cloud: "v1.10"
+  enterprise: "v1.10"
+  community: "v4.2"
+status: "current | beta | coming-soon | deprecated"
+category: "feature | integration | admin | getting-started | product-overview"
+audience: "end-users | admins | developers | all"
+complexity: "beginner | intermediate | advanced"
+related_docs:
+  - "path/to/related-doc.md"
+external_links:
+  - "https://example.com/resource"
+---
+```
+
+### Available Product Tags
+
+#### Edition Tags (Display as Prominent Pills)
+| Tag | Display | Use For | Display Style |
+|-----|---------|---------|---------------|
+| `cloud` | Cloud | Cloud-specific features and administration | **Prominent pill at top** |
+| `enterprise` | Enterprise | Enterprise-specific features and installation | **Prominent pill at top** |
+| `community` | Community | Open source features and community tools | **Prominent pill at top** |
+| `airgap` | Air-Gap | Air-gapped deployment scenarios | **Prominent pill at top** |
+
+#### Product Feature Tags (Display as Regular Tags)
+| Tag | Display | Use For | Display Style |
+|-----|---------|---------|---------------|
+| `discovery` | Discovery | Network discovery and device detection features | Regular tag at bottom |
+| `assurance` | Assurance | Network monitoring and assurance capabilities | Regular tag at bottom |
+| `operator` | Operator | AI-powered network operations and automation | Regular tag at bottom |
+| `netbox` | NetBox | Core NetBox features and functionality | Regular tag at bottom |
+| `branching` | Branching | NetBox Branching extension features | Regular tag at bottom |
+
+#### Semantic Category Tags (Display as Regular Tags)
+All other tags display as smaller regular tags at the bottom under "Related Topics":
+- **Authentication**: `authentication`, `sso`, `ldap`, `saml`, `rbac`, `two-factor`
+- **Security**: `security`, `encryption`, `certificates`, `compliance`
+- **Database**: `database`, `backup`, `migration`, `upgrade`, `maintenance`
+- **APIs**: `rest-api`, `graphql`, `webhooks`, `automation`, `scripting`
+- **Monitoring**: `monitoring`, `notifications`, `alerting`, `logging`, `metrics`
+- **Development**: `custom-fields`, `plugins`, `customization`, `extensibility`
+- **Networking**: `networking`, `infrastructure`, `connectivity`, `dns`
+- **User Experience**: `getting-started`, `installation`, `configuration`, `administration`
+
+### Version Guidelines
+
+#### For Documents Modified Since May 1, 2025
+```yaml
+versions:
+  cloud: "v1.10"
+  enterprise: "v1.10"
+  community: "v4.2"
+```
+
+#### For NetBox Assurance Documents (Premium Only)
+```yaml
+versions:
+  cloud: "v1.10"
+  enterprise: "v1.10"
+  # Note: community not included as Assurance is premium-only
+```
+
+#### For NetBox Operator Documents (Premium Only)
+```yaml
+versions:
+  cloud: "v1.10"
+  enterprise: "v1.10"
+  # Note: community not included as Operator is premium-only
+```
+
+### Version Mapping Reference
+| NetBox Cloud/Enterprise | NetBox Community | Release Period | Key Features |
+|------------------------|------------------|----------------|--------------|
+| v1.9 | v4.2 | Previous stable | Base functionality |
+| v1.10 | v4.2 | Current/Recent updates | + Enterprise Assurance & Discovery |
+| v1.11 | v4.2 | Future releases | + Enterprise High Availability (HA) |
+| v1.12 | v4.3 | Next major release cycle | TBD |
+
+## Guidelines for AI-Assisted Documentation
+
+### What Goes Here
+✅ **DO include:**
+- Document templates using our enhanced frontmatter system
+- Style guides and writing standards with version tracking
+- Example content patterns from our existing docs
+- Reference materials from authoritative sources
+- Development notes and planning documents
+- AI prompts and content generation helpers with version context
+
+### What Doesn't Go Here
+❌ **DON'T include:**
+- Customer-facing documentation (belongs in `docs/`)
+- Sensitive information or credentials
+- Large binary files or images
+
+### Common Usage Scenarios
+
+#### Writing Feature Documentation
+1. Start with `templates/netbox-feature-doc-template.md`
+2. Apply appropriate edition/product/semantic tags
+3. Follow `style-guides/netbox-docs-style-guide.md`
+4. Use correct version mapping
+
+#### Premium Features (Cloud/Enterprise Only)
+```yaml
+tags:
+  - cloud
+  - enterprise
+  - assurance                # Premium product
+versions:
+  cloud: "v1.10"
+  enterprise: "v1.10"
+  # Note: community not included
+```
+
+#### Universal Features (All Editions)
+```yaml
+tags:
+  - cloud
+  - enterprise
+  - community
+  - discovery                # Available everywhere
+versions:
+  cloud: "v1.10"
+  enterprise: "v1.10"
+  community: "v4.2"
+```
+
+## Security & Deployment
+
+### Protection Status
+- ✅ **Git tracked**: Available to team members and contributors
+- ✅ **Build excluded**: Never appears on live site (netboxlabs.com/docs)
+- ✅ **Docusaurus ignored**: Explicitly excluded in docusaurus.config.ts
+- ✅ **Directory separation**: Located outside docs/ processing path
+
+### How It's Protected
+1. **Build-time exclusion**: Docusaurus configuration excludes `ai-reference/**`
+2. **Directory separation**: Outside the public `docs/` path
+3. **Multiple exclusion patterns**: Comprehensive protection in build process
+
+This ensures the ai-reference system enhances your internal workflow without any risk to the live documentation site.
+
+## Quick Reference
+
+For fast lookup of common tasks, see [QUICK_REFERENCE.md](./QUICK_REFERENCE.md).
+For comprehensive system details, see [SYSTEM_OVERVIEW.md](./SYSTEM_OVERVIEW.md).
+
+---
+
+**AI Reference System** | **Last Updated**: 2025-01-27  
+**Status**: Production Ready | **Security**: Internal Only 
\ No newline at end of file
diff --git a/ai-reference/SYSTEM_OVERVIEW.md b/ai-reference/SYSTEM_OVERVIEW.md
new file mode 100644
index 00000000..74f5f376
--- /dev/null
+++ b/ai-reference/SYSTEM_OVERVIEW.md
@@ -0,0 +1,190 @@
+---
+tags:
+  - ai-reference
+  - system-overview
+  - documentation
+  - development
+  - comprehensive
+author: "NetBox Labs Documentation Team"
+last_updated: "2025-01-27"
+category: "system-overview"
+audience: "developers"
+complexity: "intermediate"
+description: "Comprehensive system overview of AI reference materials and documentation system"
+internal_only: true
+draft: true
+---
+
+# NetBox Labs Documentation System - Complete Overview
+
+## 🎯 System Purpose
+
+The AI Reference System provides comprehensive development resources for NetBox Labs documentation, supporting both human developers and AI-assisted workflows.
+
+## 🏗️ Architecture
+
+### Documentation Hub Integration
+```
+external-repos/ → ai-reference/ → docs/ → Live Site
+```
+
+The ai-reference system sits between the external repositories and the final documentation, providing templates, style guides, and reference materials for consistent documentation creation.
+
+## 🏷️ Complete Tagging System
+
+### Edition Tags (Prominent Pills)
+- `cloud` - NetBox Cloud features (#00d9be)
+- `enterprise` - NetBox Enterprise features (#ffac00)  
+- `community` - Open source features (#00bee0)
+- `airgap` - Air-gapped deployments (#6c757d)
+
+### Product Tags (Regular Display)
+- `netbox` - Core NetBox functionality
+- `discovery` - Network discovery features (all editions)
+- `assurance` - Network monitoring (Cloud/Enterprise only)
+- `operator` - AI-powered operations (Cloud/Enterprise only)
+- `branching` - NetBox Branching extension (Cloud/Enterprise only)
+
+### Semantic Categories (38+ Tags)
+- **Authentication**: `authentication`, `sso`, `ldap`, `saml`, `rbac`, `two-factor`
+- **Security**: `security`, `encryption`, `certificates`, `compliance`
+- **Database**: `database`, `backup`, `migration`, `upgrade`, `maintenance`
+- **APIs**: `rest-api`, `graphql`, `webhooks`, `automation`, `scripting`
+- **Monitoring**: `monitoring`, `notifications`, `alerting`, `logging`, `metrics`
+- **Development**: `custom-fields`, `plugins`, `customization`, `extensibility`
+- **Networking**: `networking`, `infrastructure`, `connectivity`, `dns`
+- **User Experience**: `getting-started`, `installation`, `configuration`, `administration`
+
+## 📋 Frontmatter Template
+
+```yaml
+---
+tags:
+  - cloud                    # Edition (prominent)
+  - enterprise
+  - discovery                # Product (regular)
+  - authentication           # Semantic (regular)
+title: "Document Title"
+description: "SEO description"
+author: "NetBox Labs Documentation Team"
+last_updated: "2025-01-27"
+versions:
+  cloud: "v1.10"
+  enterprise: "v1.10"
+  community: "v4.2"
+status: "current"
+category: "feature"
+audience: "end-users"
+complexity: "beginner"
+---
+```
+
+## 🚀 Development Workflow
+
+```bash
+# Update source materials
+git submodule update --remote
+
+# Transform all documentation
+yarn transform-docs
+
+# Start development server
+yarn dev
+```
+
+## 📁 File Reference
+
+### Templates (3 files)
+- `netbox-feature-doc-template.md` - Standard feature docs
+- `product-landing-page.md` - Product overview pages
+- `semantic-tagging-usage.md` - Tag examples (to be added)
+
+### Style Guides (3 files)
+- `netbox-docs-style-guide.md` - Writing standards
+- `product-tagging-guide.md` - Tagging system (to be added)
+- `ai-prompting-guide.md` - AI assistance best practices (to be added)
+
+### Content Strategy (2 files)
+- `navigation-guidelines.md` - User-centric organization
+- `version-management.md` - Version coordination (to be added)
+
+### Reference Docs (4 files)
+- `dochub-integration-summary.md` - Complete DocHub integration implementation summary
+- `workflow-fixes.md` - GitHub Actions workflow fixes and troubleshooting
+- `semantic-tagging-system.md` - Complete tagging documentation (to be added)
+- `dochub-integration-requirements.md` - Technical specs (to be added)
+
+## 🎯 Common Usage Scenarios
+
+### Writing Feature Documentation
+1. Start with `templates/netbox-feature-doc-template.md`
+2. Apply appropriate edition/product/semantic tags
+3. Follow `style-guides/netbox-docs-style-guide.md`
+4. Use correct version mapping
+
+### Premium Features (Cloud/Enterprise Only)
+```yaml
+tags:
+  - cloud
+  - enterprise
+  - assurance                # Premium product
+versions:
+  cloud: "v1.10"
+  enterprise: "v1.10"
+  # Note: community not included
+```
+
+### Universal Features (All Editions)
+```yaml
+tags:
+  - cloud
+  - enterprise
+  - community
+  - discovery                # Available everywhere
+versions:
+  cloud: "v1.10"
+  enterprise: "v1.10"
+  community: "v4.2"
+```
+
+### AI-Assisted Writing
+1. Provide context from relevant ai-reference files
+2. Follow `style-guides/ai-prompting-guide.md` (when available)
+3. Use appropriate template
+4. Apply comprehensive tagging system
+
+## 📊 System Metrics
+
+- **Total Files**: 17+ comprehensive reference files
+- **Edition Tags**: 4 (cloud, enterprise, community, airgap)
+- **Product Tags**: 5 (netbox, discovery, assurance, operator, branching)
+- **Semantic Categories**: 38+ across 8 major areas
+- **Version Coordination**: NetBox v4.2 (Community), v1.10 (Cloud/Enterprise)
+
+## 🔧 Security & Deployment
+
+### Protection Mechanisms
+- **Git tracked**: Available to team members via repository
+- **Build excluded**: Never appears on live site (netboxlabs.com/docs)
+- **Docusaurus ignored**: Explicitly excluded in docusaurus.config.ts
+- **Directory separation**: Located outside docs/ processing path
+
+### How It Works
+1. **Development Access**: Team can access via Git for templates and guidance
+2. **Build Process**: Docusaurus ignores ai-reference during site generation
+3. **Live Site**: Users never see internal reference materials
+4. **Security**: Internal documentation stays internal
+
+## 🔧 Maintenance
+
+- **Source Sync**: Manual updates to reference materials as needed
+- **Quality**: Style guide validation and tag accuracy
+- **Updates**: Regular review of templates and guidelines
+- **Integration**: Coordination with main documentation transformation pipeline
+
+---
+
+**System Overview** | **Last Updated**: 2025-01-27  
+**Status**: Production Ready | **Version**: v2.0
+
+*Complete overview of NetBox Labs AI reference system for development team use.* 
\ No newline at end of file
diff --git a/ai-reference/content-strategy/navigation-guidelines.md b/ai-reference/content-strategy/navigation-guidelines.md
new file mode 100644
index 00000000..a578aa99
--- /dev/null
+++ b/ai-reference/content-strategy/navigation-guidelines.md
@@ -0,0 +1,248 @@
+# Navigation Structure Guidelines
+
+## Overview
+This document provides guidelines for organizing and structuring navigation across all NetBox documentation to ensure consistency and optimal user experience.
+
+## Navigation Hierarchy Principles
+
+### 1. User-Centric Organization
+- **Primary navigation** should reflect user goals and workflows
+- **Secondary navigation** should group related tasks and concepts
+- **Tertiary navigation** should provide granular access to specific topics
+
+### 2. Logical Grouping
+- Group related content together
+- Use clear, descriptive labels
+- Maintain consistent terminology across sections
+- Limit nesting to 3-4 levels maximum
+
+### 3. Progressive Disclosure
+- Start with overview/getting started content
+- Progress from basic to advanced topics
+- Provide clear entry points for different user types
+
+## Standard Navigation Structure
+
+### Product Documentation Structure
+```
+Product Name/
+├── Overview (landing page)
+├── Getting Started/
+│   ├── Quick Start
+│   ├── Installation
+│   └── Basic Configuration
+├── User Guide/
+│   ├── Common Tasks
+│   ├── Advanced Features
+│   └── Best Practices
+├── Administration/
+│   ├── Configuration
+│   ├── Security
+│   └── Maintenance
+├── Integration/
+│   ├── API Reference
+│   ├── Third-party Tools
+│   └── Custom Development
+├── Troubleshooting/
+│   ├── Common Issues
+│   ├── Error Messages
+│   └── Support Resources
+└── Reference/
+    ├── Configuration Options
+    ├── CLI Commands
+    └── Changelog
+```
+
+### Multi-Product Navigation
+For the unified documentation site:
+
+1. **NetBox Community** (first)
+2. **NetBox Cloud** (second)
+3. **NetBox Enterprise** (third)
+4. **Discovery & Assurance** (fourth)
+5. **Integrations** (fifth)
+6. **Extensions** (last)
+
+## Navigation Labels
+
+### Standard Labels
+- **Overview**: Product or feature introduction
+- **Getting Started**: Initial setup and basic usage
+- **User Guide**: Detailed usage instructions
+- **Administration**: System administration tasks
+- **Configuration**: Settings and customization
+- **Installation**: Setup procedures
+- **Troubleshooting**: Problem resolution
+- **Reference**: Technical specifications
+- **API**: API documentation
+- **Examples**: Code samples and use cases
+
+### Label Guidelines
+- Use consistent terminology across products
+- Keep labels concise (1-3 words)
+- Use sentence case (not title case)
+- Avoid technical jargon in top-level labels
+- Use verbs for action-oriented content
+
+## Content Organization Patterns
+
+### Feature Documentation
+```
+Feature Name/
+├── Overview
+├── Prerequisites
+├── Configuration
+├── Usage Guide
+├── API Reference
+├── Examples
+├── Troubleshooting
+└── Related Features
+```
+
+### Integration Documentation
+```
+Integration Name/
+├── Overview
+├── Installation
+├── Configuration
+├── Usage Examples
+├── API Reference
+├── Troubleshooting
+└── FAQ
+```
+
+### Administration Documentation
+```
+Administration Topic/
+├── Overview
+├── Prerequisites
+├── Step-by-step Guide
+├── Configuration Options
+├── Security Considerations
+├── Troubleshooting
+└── Best Practices
+```
+
+## Navigation Metadata
+
+### Frontmatter for Navigation
+```yaml
+---
+nav_order: 10          # Controls ordering within section
+nav_parent: "User Guide" # Parent section
+nav_exclude: false     # Hide from navigation
+nav_section: "Getting Started" # Section grouping
+sidebar_position: 2    # Docusaurus sidebar position
+---
+```
+
+### Navigation Tags
+Use tags to enable cross-cutting navigation:
+- `getting-started`: Entry-level content
+- `advanced`: Advanced user content
+- `admin`: Administrative content
+- `api`: API-related content
+- `troubleshooting`: Problem resolution
+
+## Responsive Navigation
+
+### Mobile Considerations
+- Limit top-level sections to 6-8 items
+- Use collapsible sections for deep hierarchies
+- Provide search functionality
+- Include breadcrumb navigation
+
+### Desktop Optimization
+- Show 2-3 levels of navigation simultaneously
+- Use hover states for preview
+- Provide quick access to frequently used sections
+- Include contextual navigation aids
+
+## Search Integration
+
+### Search-Friendly Structure
+- Use descriptive headings that match search queries
+- Include synonyms and alternative terms
+- Provide clear content descriptions
+- Tag content appropriately for filtering
+
+### Search Enhancement
+- Include "Popular" or "Recommended" sections
+- Provide guided navigation for new users
+- Use progressive disclosure for complex topics
+- Enable filtering by product, audience, or complexity
+
+## Cross-References and Linking
+
+### Internal Linking Strategy
+- Link to related content within sections
+- Provide "See also" sections
+- Use contextual inline links
+- Include navigation aids (next/previous)
+
+### External Linking
+- Clearly mark external links
+- Provide context for external resources
+- Use appropriate link text
+- Consider link maintenance
+
+## Version-Specific Navigation
+
+### Version Handling
+- Show version-specific content appropriately
+- Provide clear version indicators
+- Enable easy switching between versions
+- Maintain consistent navigation across versions
+
+### Content Filtering
+- Filter by product edition (Community, Cloud, Enterprise)
+- Filter by feature availability
+- Show/hide based on user permissions
+- Provide clear indicators for filtered content
+
+## Accessibility Guidelines
+
+### Navigation Accessibility
+- Use semantic HTML for navigation elements
+- Provide keyboard navigation support
+- Include skip links for screen readers
+- Use appropriate ARIA labels
+- Ensure sufficient color contrast
+
+### Content Structure
+- Use proper heading hierarchy (H1 → H2 → H3)
+- Provide alternative text for images
+- Use descriptive link text
+- Include page titles and descriptions
+
+## Maintenance and Updates
+
+### Regular Review
+- Review navigation structure quarterly
+- Update based on user feedback
+- Monitor analytics for navigation patterns
+- Test with new users regularly
+
+### Content Updates
+- Update navigation when adding new content
+- Maintain consistency across related sections
+- Archive or redirect outdated content
+- Update cross-references when moving content
+
+## Implementation Notes
+
+### Docusaurus Specific
+- Use `sidebars.ts` for main navigation structure
+- Leverage `docusaurus.config.ts` for global navigation
+- Use categories for grouping related content
+- Implement custom navigation components as needed
+
+### MkDocs Integration
+- Map MkDocs navigation to Docusaurus structure
+- Preserve existing URL patterns where possible
+- Handle navigation differences between platforms
+- Maintain backward compatibility
+
+---
+
+This navigation structure ensures consistent, user-friendly access to all NetBox documentation while supporting the enhanced frontmatter system and version management capabilities. 
\ No newline at end of file
diff --git a/ai-reference/content-strategy/version-management.md b/ai-reference/content-strategy/version-management.md
new file mode 100644
index 00000000..bbe45099
--- /dev/null
+++ b/ai-reference/content-strategy/version-management.md
@@ -0,0 +1,272 @@
+---
+tags:
+  - ai-reference
+  - version-management
+  - cloud
+  - enterprise
+  - community
+  - content-strategy
+author: "NetBox Labs Documentation Team"
+last_updated: "2025-01-27"
+category: "content-strategy"
+audience: "developers"
+complexity: "intermediate"
+description: "Version management guidelines for NetBox documentation"
+internal_only: true
+draft: true
+---
+
+# Version Management Guidelines
+
+## Overview
+
+This guide explains how to manage version information across NetBox Cloud, Enterprise, and Community documentation to ensure accuracy and consistency.
+
+## Version Mapping
+
+### Current Version Alignment
+| NetBox Cloud/Enterprise | NetBox Community | Release Period | Key Features |
+|------------------------|------------------|----------------|--------------|
+| v1.9 | v4.2 | Previous stable | Base functionality |
+| v1.10 | v4.2 | Current/Recent updates | + Enterprise Assurance & Discovery |
+| v1.11 | v4.2 | Future releases | + Enterprise High Availability (HA) |
+| v1.12 | v4.3 | Next major release cycle | TBD |
+
+### Version Guidelines
+
+#### For Documents Modified Since May 1, 2025
+```yaml
+versions:
+  cloud: "v1.10"
+  enterprise: "v1.10"
+  community: "v4.2"
+```
+
+#### For Legacy Documents (Pre-May 1, 2025)
+```yaml
+versions:
+  cloud: "v1.9"
+  enterprise: "v1.9"
+  community: "v4.2"
+```
+
+## Product-Specific Versioning
+
+### NetBox Discovery (Universal Feature)
+Available across all editions:
+```yaml
+tags:
+  - cloud
+  - enterprise
+  - community
+  - discovery
+versions:
+  cloud: "v1.10"
+  enterprise: "v1.10"
+  community: "v4.2"
+```
+
+### NetBox Assurance (Premium Only)
+Cloud and Enterprise only:
+```yaml
+tags:
+  - cloud
+  - enterprise
+  - assurance
+versions:
+  cloud: "v1.10"
+  enterprise: "v1.10"
+  # Note: community not included as Assurance is premium-only
+```
+
+### NetBox Operator (Premium Only)
+Cloud and Enterprise only:
+```yaml
+tags:
+  - cloud
+  - enterprise
+  - operator
+versions:
+  cloud: "v1.10"
+  enterprise: "v1.10"
+  # Note: community not included as Operator is premium-only
+```
+
+### NetBox Branching (Premium Extension)
+Cloud and Enterprise only:
+```yaml
+tags:
+  - cloud
+  - enterprise
+  - branching
+versions:
+  cloud: "v1.10"
+  enterprise: "v1.10"
+  # Note: community not included as Branching is premium extension
+```
+
+### Air-Gap Deployments
+Enterprise-specific deployment method:
+```yaml
+tags:
+  - airgap
+  - enterprise
+versions:
+  enterprise: "v1.10"
+  # Note: Air-gap is Enterprise-specific
+```
+
+## Status Management
+
+### Status Values
+- `current` - Currently supported and recommended
+- `beta` - In beta testing, may have limitations
+- `coming-soon` - Announced but not yet available
+- `deprecated` - Still supported but not recommended for new deployments
+- `archived` - No longer supported
+
+### Status Examples
+
+#### Current Feature
+```yaml
+status: "current"
+versions:
+  cloud: "v1.10"
+  enterprise: "v1.10"
+```
+
+#### Beta Feature
+```yaml
+status: "beta"
+versions:
+  cloud: "v1.10"
+  enterprise: "v1.10"
+description: "This feature is in beta and may have limitations"
+```
+
+#### Coming Soon Feature
+```yaml
+status: "coming-soon"
+versions:
+  cloud: "v1.11"
+  enterprise: "v1.11"
+description: "This feature will be available in the next release"
+```
+
+## Version-Aware Content
+
+### Conditional Content Display
+Use status and version information to control content visibility:
+
+```yaml
+# This content only shows for current versions
+status: "current"
+versions:
+  cloud: "v1.10"
+  enterprise: "v1.10"
+```
+
+### Future Feature Documentation
+```yaml
+# Document future features with coming-soon status
+status: "coming-soon"
+versions:
+  cloud: "v1.11"
+  enterprise: "v1.11"
+title: "NetBox High Availability (Coming Soon)"
+```
+
+## Best Practices
+
+### When Writing New Documentation
+
+1. **Check Current Versions**: Always use the latest version numbers
+2. **Verify Product Availability**: Ensure the feature exists in specified editions
+3. **Set Appropriate Status**: Use current/beta/coming-soon as appropriate
+4. **Include All Applicable Editions**: Don't forget Community if the feature is universal
+
+### When Updating Existing Documentation
+
+1. **Update Version Numbers**: Bump to current versions if content is updated
+2. **Review Product Availability**: Check if feature availability has changed
+3. **Update Status**: Move from beta to current, or current to deprecated as needed
+4. **Maintain Accuracy**: Ensure version info matches actual product releases
+
+### Version Coordination
+
+1. **Cloud/Enterprise Alignment**: These typically share version numbers
+2. **Community Independence**: Community follows its own versioning scheme
+3. **Feature Parity**: Not all features are available in all editions
+4. **Release Timing**: Cloud/Enterprise may release features before Community
+
+## Common Patterns
+
+### Universal Core Feature
+```yaml
+tags:
+  - cloud
+  - enterprise
+  - community
+  - netbox
+versions:
+  cloud: "v1.10"
+  enterprise: "v1.10"
+  community: "v4.2"
+status: "current"
+```
+
+### Premium Monitoring Feature
+```yaml
+tags:
+  - cloud
+  - enterprise
+  - assurance
+  - monitoring
+versions:
+  cloud: "v1.10"
+  enterprise: "v1.10"
+status: "current"
+```
+
+### Enterprise Installation
+```yaml
+tags:
+  - enterprise
+  - installation
+  - getting-started
+versions:
+  enterprise: "v1.10"
+status: "current"
+```
+
+### Community Plugin
+```yaml
+tags:
+  - community
+  - plugins
+  - customization
+versions:
+  community: "v4.2"
+status: "current"
+```
+
+## Troubleshooting Version Issues
+
+### Common Problems
+
+1. **Outdated Version Numbers**: Regular review and updates needed
+2. **Incorrect Product Availability**: Features marked for wrong editions
+3. **Status Misalignment**: Beta features marked as current, etc.
+4. **Missing Version Info**: Documents without proper version metadata
+
+### Solutions
+
+1. **Regular Audits**: Quarterly review of version information
+2. **Release Coordination**: Update docs when new versions are released
+3. **Product Team Sync**: Coordinate with product teams on feature availability
+4. **Automated Checks**: Consider automated validation of version consistency
+
+---
+
+**Version Management** | **Last Updated**: 2025-01-27  
+**Status**: Production Ready | **Usage**: Internal Development 
\ No newline at end of file
diff --git a/ai-reference/reference-docs/dochub-integration-summary.md b/ai-reference/reference-docs/dochub-integration-summary.md
new file mode 100644
index 00000000..a0f424e3
--- /dev/null
+++ b/ai-reference/reference-docs/dochub-integration-summary.md
@@ -0,0 +1,239 @@
+---
+tags:
+  - ai-reference
+  - dochub-integration
+  - implementation
+  - documentation
+  - reference
+  - development
+author: "NetBox Labs Documentation Team"
+last_updated: "2025-01-27"
+category: "reference"
+audience: "developers"
+complexity: "intermediate"
+description: "Complete implementation summary of DocHub integration and enhanced documentation structure"
+internal_only: true
+draft: true
+---
+
+# DocHub Integration Implementation Summary
+
+## Overview
+This document summarizes the successful implementation of the enhanced NetBox documentation structure integration as specified in the DocHub Integration Prompt for NetBox Documentation (January 2025).
+
+## ✅ Completed Integration Components
+
+### 1. AI Reference Structure ✅
+**Status**: Fully Implemented
+
+**Location**: `ai-reference/` directory
+
+**Components Implemented**:
+- ✅ **Main README**: Comprehensive overview and usage guidelines
+- ✅ **Style Guide**: Complete NetBox documentation standards (`ai-reference/style-guides/netbox-docs-style-guide.md`)
+- ✅ **Templates**: 
+  - Feature documentation template (`ai-reference/templates/netbox-feature-doc-template.md`)
+  - Product landing page template (`ai-reference/templates/product-landing-page.md`)
+- ✅ **Content Strategy**: Navigation guidelines (`ai-reference/content-strategy/navigation-guidelines.md`)
+
+### 2. Enhanced Frontmatter System ✅
+**Status**: Fully Implemented and Operational
+
+**Key Features**:
+- ✅ **Comprehensive Metadata Schema**:
+  ```yaml
+  ---
+  tags: [product-tags, feature-tags, category-tags]
+  title: "Document Title"
+  author: "NetBox Labs"
+  last_updated: "YYYY-MM-DD"
+  versions:
+    netbox_cloud: "v1.10"
+    netbox_enterprise: "v1.10"
+    netbox_community: "v4.2"
+  status: "current"
+  description: "Brief description"
+  category: "administration"
+  audience: "administrators"
+  complexity: "intermediate"
+  ---
+  ```
+
+- ✅ **Version-Aware Content Filtering**: Implemented in transformation pipeline
+- ✅ **Automatic Frontmatter Enhancement**: Adds missing metadata during transformation
+- ✅ **Docusaurus Compatibility**: Converts enhanced frontmatter to Docusaurus format
+
+### 3. Enhanced Transformation Pipeline ✅
+**Status**: Fully Implemented and Tested
+
+**Enhancements Made**:
+- ✅ **Frontmatter Processing**: Extract, validate, and convert frontmatter
+- ✅ **Version Filtering**: Hide/show content based on status and version compatibility
+- ✅ **Metadata Enrichment**: Automatically add missing metadata fields
+- ✅ **Backward Compatibility**: Maintains existing transformation functionality
+- ✅ **Error Handling**: Graceful handling of malformed frontmatter
+
+### 4. Updated NetBox Assurance Documentation ✅
+**Status**: Already Present and Enhanced
+
+**Current State**:
+- ✅ **Comprehensive Content**: NetBox Assurance documentation is current and complete
+- ✅ **Enhanced Frontmatter**: Applied new metadata system
+- ✅ **Version Targeting**: Properly tagged for NetBox Cloud v1.10 and Enterprise v1.10
+- ✅ **Navigation Integration**: Properly integrated in Discovery & Assurance section
+
+### 5. Improved Navigation Structure ✅
+**Status**: Maintained and Enhanced
+
+**Current Structure**:
+- ✅ **Logical Organization**: Clear separation of Community, Cloud, Enterprise, Discovery & Assurance
+- ✅ **Discovery & Assurance Integration**: Properly nested under unified section
+- ✅ **Extensions Positioning**: Extensions section positioned last as requested
+- ✅ **Consistent Labeling**: Standardized navigation labels across products
+
+## 🔧 Technical Implementation Details
+
+### Enhanced Transformation Script
+**File**: `scripts/transformDocs.ts`
+
+**New Capabilities**:
+1. **Enhanced Frontmatter Interface**: TypeScript interfaces for structured metadata
+2. **Version Configuration**: Centralized version management with defaults
+3. **Content Filtering**: Environment-based content visibility controls
+4. **Metadata Conversion**: Seamless conversion between MkDocs and Docusaurus formats
+5. **Automatic Enhancement**: Intelligent addition of missing metadata
+
+### Version Management System
+**Default Versions**:
+- NetBox Cloud: v1.10
+- NetBox Enterprise: v1.10
+- NetBox Community: v4.2
+
+**Status Filtering**:
+- `current`: Always visible
+- `beta`: Controlled by `SHOW_BETA_CONTENT` environment variable
+- `alpha`: Controlled by `SHOW_ALPHA_CONTENT` environment variable
+- `deprecated`: Controlled by `SHOW_DEPRECATED_CONTENT` environment variable
+- `archived`: Never visible
+
+### AI Reference System
+**Purpose**: Standardize documentation creation and maintenance
+
+**Key Benefits**:
+1. **Consistency**: Unified templates and style guides
+2. **Quality**: Structured review processes and checklists
+3. **Efficiency**: Reusable templates and patterns
+4. **Integration**: Seamless DocHub compatibility
+
+### Automated Documentation Workflow ✅
+**Status**: Enhanced and Operational
+
+**File**: `.github/workflows/update-submodules.yml`
+
+**Recent Improvements**:
+1. **Submodule Restoration**: Fixed git fetch issues preventing commit checkout
+2. **Source Analysis**: Enhanced to analyze actual source files in submodules
+3. **Error Handling**: Graceful handling of permission errors and git operations
+4. **PR Descriptions**: Detailed file change summaries with specific filenames
+
+**Key Features**:
+- ✅ **Automatic Updates**: Monitors NetBox and Console documentation repositories
+- ✅ **Smart Detection**: Analyzes changes in `external-repos/netbox/docs/` and `external-repos/console-docs/docs/` + `overrides/`
+- ✅ **Reliable Processing**: Git fetch operations ensure commit availability
+- ✅ **Detailed Reporting**: PR descriptions show specific added/modified/removed files
+- ✅ **Permission Handling**: Graceful label creation with fallback for restricted environments
+
+## 📊 Integration Results
+
+### Build Status
+- ✅ **Successful Build**: Docusaurus builds without errors
+- ✅ **Transformation Pipeline**: Processes 607 files (284 NetBox + 323 Console)
+- ✅ **Sidebar Generation**: Automatically generates navigation structure
+- ✅ **Frontmatter Processing**: Enhances metadata across all documentation
+
+### Content Processing
+- ✅ **File Processing**: All 607 files processed successfully
+- ✅ **Frontmatter Enhancement**: Automatic metadata addition for files without frontmatter
+- ✅ **Version Compatibility**: Proper version tagging applied
+- ✅ **Navigation Structure**: Maintained existing navigation while adding enhancements
+
+### Quality Assurance
+- ✅ **No Breaking Changes**: Existing functionality preserved
+- ✅ **Backward Compatibility**: Legacy frontmatter formats supported
+- ✅ **Error Handling**: Graceful degradation for edge cases
+- ✅ **Performance**: Build times remain acceptable (< 30 seconds)
+
+### Workflow Automation
+- ✅ **Submodule Handling**: Resolved git fetch conflicts during dependency installation
+- ✅ **Source Monitoring**: Accurate detection of changes in source repositories
+- ✅ **Permission Management**: Graceful handling of GitHub API limitations
+- ✅ **Detailed Reporting**: Enhanced PR descriptions with specific file change details
+
+## 🎯 Key Success Criteria Met
+
+### Functional Requirements ✅
+- ✅ All documentation content accessible and properly formatted
+- ✅ Version-specific content displays correctly (when enabled)
+- ✅ Search functionality includes all content
+- ✅ Navigation is intuitive and maintains existing user paths
+
+### Technical Requirements ✅
+- ✅ Page load times remain acceptable
+- ✅ Mobile experience optimized (existing responsive design)
+- ✅ SEO metadata preserved and improved with enhanced frontmatter
+- ✅ Analytics tracking continues to function
+
+### Content Quality ✅
+- ✅ Enhanced frontmatter system provides comprehensive metadata
+- ✅ Internal links function correctly
+- ✅ Images and media display properly
+- ✅ Version information is current and accurate
+
+## 🚀 Future Enhancements Ready
+
+### Phase 2 Capabilities (Ready for Implementation)
+1. **Content Filtering UI**: Enable users to filter by version, audience, complexity
+2. **Advanced Search**: Leverage enhanced metadata for better search results
+3. **Content Analytics**: Track usage patterns using metadata tags
+4. **Automated Quality Checks**: Lint content against style guide standards
+
+### Template Expansion (Available)
+1. **API Documentation Template**: Ready for implementation
+2. **Troubleshooting Guide Template**: Available in AI reference
+3. **Integration Guide Template**: Structured for third-party integrations
+4. **Best Practices Template**: For operational guidance
+
+## 📝 Integration Notes
+
+### Environment Variables
+For production deployment, consider these environment variables:
+- `SHOW_BETA_CONTENT=false` (default)
+- `SHOW_ALPHA_CONTENT=false` (default)
+- `SHOW_DEPRECATED_CONTENT=false` (default)
+
+### Content Maintenance
+- Enhanced frontmatter enables automated content management
+- Version compatibility tracking supports lifecycle management
+- Metadata tags enable content analytics and optimization
+
+### Migration Path
+- Existing content continues to work without modification
+- New content should use enhanced frontmatter templates
+- Gradual migration to enhanced metadata recommended
+
+## ✅ Integration Completion Status
+
+**Overall Status**: ✅ **COMPLETE AND OPERATIONAL**
+
+**Timeline**: Completed within integration timeframe
+**Quality**: All success criteria met
+**Performance**: No degradation in build or runtime performance
+**Compatibility**: Full backward compatibility maintained
+
+---
+
+**Next Steps**: This enhanced documentation system is ready for production deployment and provides a solid foundation for future documentation improvements and AI-assisted content generation.
+
+**Date**: June 20, 2025
+**Integration Version**: 1.0.0
+**Branch**: `integrate-enhanced-docs-structure` 
\ No newline at end of file
diff --git a/ai-reference/style-guides/netbox-docs-style-guide.md b/ai-reference/style-guides/netbox-docs-style-guide.md
new file mode 100644
index 00000000..86f063ab
--- /dev/null
+++ b/ai-reference/style-guides/netbox-docs-style-guide.md
@@ -0,0 +1,212 @@
+# NetBox Documentation Style Guide
+
+## Overview
+This style guide ensures consistency across all NetBox documentation, including Community, Cloud, Enterprise, and plugin documentation.
+
+## Enhanced Frontmatter System
+
+### Standard Frontmatter Template
+```yaml
+---
+tags: [product-tags, feature-tags, category-tags]
+title: "Clear, Descriptive Title"
+author: "NetBox Labs"
+last_updated: "YYYY-MM-DD"
+versions:
+  netbox_cloud: "v1.10"
+  netbox_enterprise: "v1.10" 
+  netbox_community: "v4.2"
+status: "current"  # current, deprecated, beta, alpha
+description: "Brief, SEO-friendly description"
+category: "administration"  # See categories below
+audience: "administrators"  # administrators, developers, end-users
+complexity: "intermediate"  # beginner, intermediate, advanced
+---
+```
+
+### Required Fields
+- **tags**: Array of relevant tags for filtering and categorization
+- **title**: Human-readable page title
+- **author**: Always "NetBox Labs" for consistency
+- **last_updated**: ISO date format (YYYY-MM-DD)
+- **versions**: Version compatibility information
+- **status**: Document lifecycle status
+- **description**: Brief description for SEO and previews
+
+### Optional Fields
+- **category**: Content categorization
+- **audience**: Target audience
+- **complexity**: Technical complexity level
+
+## Content Categories
+
+### Primary Categories
+- **administration**: System administration and configuration
+- **development**: Developer guides and API documentation
+- **features**: Feature documentation and usage guides
+- **installation**: Installation and setup procedures
+- **troubleshooting**: Problem resolution guides
+- **integrations**: Third-party integrations and SDKs
+- **reference**: Reference materials and specifications
+
+### Audience Types
+- **administrators**: System administrators and IT professionals
+- **developers**: Software developers and integrators
+- **end-users**: Regular NetBox users
+- **decision-makers**: Management and procurement
+
+### Complexity Levels
+- **beginner**: Requires minimal technical knowledge
+- **intermediate**: Requires basic technical familiarity
+- **advanced**: Requires specialized technical expertise
+
+## Version Management
+
+### Version Specification Format
+```yaml
+versions:
+  netbox_cloud: "v1.10"        # NetBox Cloud version compatibility
+  netbox_enterprise: "v1.10"  # NetBox Enterprise version compatibility
+  netbox_community: "v4.2"    # NetBox Community version compatibility
+```
+
+### Version Status Values
+- **current**: Currently supported and maintained
+- **deprecated**: Deprecated but still functional
+- **beta**: In beta testing phase
+- **alpha**: In alpha development phase
+- **archived**: Historical reference only
+
+## Tag Guidelines
+
+### Product Tags
+- `netbox-cloud`: NetBox Cloud specific content
+- `netbox-enterprise`: NetBox Enterprise specific content
+- `netbox-community`: NetBox Community specific content
+- `netbox-discovery`: NetBox Discovery related content
+- `netbox-assurance`: NetBox Assurance related content
+
+### Feature Tags
+- `api`: API related content
+- `authentication`: Authentication and authorization
+- `automation`: Automation and scripting
+- `backup`: Backup and recovery
+- `configuration`: Configuration management
+- `integrations`: Third-party integrations
+- `monitoring`: Monitoring and alerting
+- `networking`: Networking features
+- `security`: Security features
+- `ui`: User interface related content
+
+### Category Tags
+- `administration`: Administrative tasks
+- `development`: Development and customization
+- `installation`: Installation procedures
+- `troubleshooting`: Problem resolution
+- `reference`: Reference materials
+
+## Content Structure Guidelines
+
+### Page Structure
+1. **Frontmatter** (required)
+2. **Product Pills** (for multi-product features)
+3. **Introduction** (brief overview)
+4. **Prerequisites** (if applicable)
+5. **Main Content** (structured with headers)
+6. **Related Links** (if applicable)
+7. **Support Information**
+
+### Product Pills
+Use HTML spans to indicate product availability:
+```html
+<span class="pill pill-cloud">NetBox Cloud</span>
+<span class="pill pill-enterprise">NetBox Enterprise</span>
+<span class="pill pill-community">NetBox Community</span>
+```
+
+### Header Hierarchy
+- **H1**: Page title (one per page)
+- **H2**: Major sections
+- **H3**: Subsections
+- **H4**: Sub-subsections (use sparingly)
+
+### Code Examples
+- Use appropriate language tags for syntax highlighting
+- Include complete, runnable examples
+- Provide context and explanation
+- Use consistent naming conventions
+
+### Screenshots and Images
+- Use descriptive alt text
+- Optimize for web (reasonable file sizes)
+- Use consistent styling and UI elements
+- Update regularly to reflect current UI
+
+## Writing Style
+
+### Tone and Voice
+- **Professional but approachable**: Clear, helpful, and authoritative
+- **Active voice**: "Configure the setting" vs "The setting should be configured"
+- **Present tense**: "NetBox displays the results" vs "NetBox will display"
+- **Direct address**: "You can configure" vs "Users can configure"
+
+### Terminology
+- **Consistent naming**: Use official product names and feature names
+- **Avoid jargon**: Explain technical terms when first introduced
+- **Standard spellings**: NetBox (not Netbox), API (not api)
+
+### Formatting
+- **Bold**: For UI elements, important concepts, and emphasis
+- **Italic**: For file paths, variable names, and emphasis
+- **Code**: For code examples, commands, and configuration values
+- **Lists**: For sequential steps and multiple items
+
+## Quality Standards
+
+### Content Requirements
+- **Accuracy**: All information must be current and correct
+- **Completeness**: Cover all necessary steps and information
+- **Clarity**: Easy to understand and follow
+- **Consistency**: Follow established patterns and conventions
+
+### Review Checklist
+- [ ] Frontmatter complete and accurate
+- [ ] Product pills correctly applied
+- [ ] Version compatibility verified
+- [ ] Screenshots current and relevant
+- [ ] Code examples tested and working
+- [ ] Links functional and appropriate
+- [ ] Grammar and spelling checked
+- [ ] Style guide compliance verified
+
+## Integration with DocHub
+
+### Docusaurus Compatibility
+- Frontmatter will be converted to Docusaurus format during transformation
+- Product pills will be processed by custom CSS
+- Navigation structure will be maintained through sidebar generation
+- Version information will be used for content filtering
+
+### SEO Considerations
+- Use descriptive titles and descriptions
+- Include relevant tags for discoverability
+- Maintain consistent URL structures
+- Optimize images with alt text
+
+## Maintenance Guidelines
+
+### Regular Updates
+- Review and update version compatibility quarterly
+- Refresh screenshots with UI changes
+- Validate links and code examples regularly
+- Update frontmatter dates when content changes
+
+### Deprecation Process
+1. Update status to "deprecated"
+2. Add deprecation notice to content
+3. Maintain for one major version cycle
+4. Archive or remove after sufficient notice
+
+---
+
+This style guide ensures consistent, high-quality documentation across all NetBox products and maintains compatibility with the DocHub integration system. 
\ No newline at end of file
diff --git a/ai-reference/style-guides/product-tagging-guide.md b/ai-reference/style-guides/product-tagging-guide.md
new file mode 100644
index 00000000..f298839b
--- /dev/null
+++ b/ai-reference/style-guides/product-tagging-guide.md
@@ -0,0 +1,254 @@
+---
+tags:
+  - ai-reference
+  - cloud
+  - enterprise
+  - community
+  - discovery
+  - style-guide
+  - reference
+  - ai-tools
+  - tagging
+  - documentation
+sidebar_position: 999
+description: AI Reference material for NetBox Labs documentation development
+internal_only: true
+draft: true
+last_updated: '2025-01-27'
+category: ai-reference
+audience: developers
+---
+
+# Product Tagging System Guide
+
+## Overview
+
+This guide explains the comprehensive product tagging system that uses Docusaurus-native frontmatter tags for better integration, categorization, and filtering capabilities.
+
+## Why This System
+
+### Benefits:
+- ✅ **SEO-friendly**: Search engines understand product categories
+- ✅ **Docusaurus native**: Full integration with Docusaurus tag system
+- ✅ **Automatic tag pages**: Generated pages for each product category
+- ✅ **Filtering capabilities**: Easy to filter docs by product
+- ✅ **API integration**: Programmatic access to document metadata
+- ✅ **Better dochub integration**: Upstream can easily categorize content
+
+## Available Product Tags
+
+### Edition Tags (Display as Prominent Pills)
+| Tag | Display Label | Color | Description |
+|-----|---------------|-------|-------------|
+| `cloud` | NetBox Cloud | 🟢 Teal (`#00d9be`) | Documentation for NetBox Cloud |
+| `enterprise` | NetBox Enterprise | 🟠 Orange (`#ffac00`) | Documentation for NetBox Enterprise |
+| `community` | NetBox Community | 🔵 Blue (`#00bee0`) | Documentation for NetBox Community |
+| `airgap` | Air-Gap | 🔴 Pink (`#ff0078`) | Documentation for air-gapped deployments |
+
+### Product Feature Tags (Display as Regular Tags)
+| Tag | Display Label | Description |
+|-----|---------------|-------------|
+| `netbox` | NetBox | Core NetBox functionality |
+| `discovery` | Discovery | Network discovery and device detection features |
+| `assurance` | Assurance | Network monitoring and assurance capabilities |
+| `operator` | Operator | AI-powered network operations and automation |
+| `branching` | Branching | NetBox Branching extension features |
+
+### Semantic Category Tags (Display as Smaller Tags)
+All other tags display as smaller regular tags at the bottom under "Related Topics":
+
+#### Authentication & Security
+- `authentication`, `sso`, `ldap`, `saml`, `rbac`, `two-factor`
+- `security`, `encryption`, `certificates`, `compliance`
+
+#### Database & Operations
+- `database`, `backup`, `migration`, `upgrade`, `maintenance`
+- `monitoring`, `notifications`, `alerting`, `logging`, `metrics`
+
+#### Development & APIs
+- `rest-api`, `graphql`, `webhooks`, `automation`, `scripting`
+- `custom-fields`, `plugins`, `customization`, `extensibility`
+
+#### User Experience
+- `getting-started`, `installation`, `configuration`, `administration`
+- `networking`, `infrastructure`, `connectivity`, `dns`
+
+## How to Use Tags
+
+### Basic Usage
+Add tags to your frontmatter and they'll automatically appear:
+
+```yaml
+---
+title: My Document
+tags:
+  - cloud
+  - enterprise
+  - discovery
+  - authentication
+---
+
+# My Document
+
+The product tags will appear automatically above this content.
+```
+
+### Tag Hierarchy Display
+
+#### Prominent Pills (Top of Document)
+Edition tags display as large, colored pills at the top:
+- `cloud`, `enterprise`, `community`, `airgap`
+
+#### Regular Tags (Below Content)
+Product and semantic tags display as regular tags:
+- `netbox`, `discovery`, `assurance`, `operator`, `branching`
+- All semantic category tags
+
+### Version-Specific Tagging
+
+#### Premium Features (Cloud/Enterprise Only)
+```yaml
+---
+tags:
+  - cloud
+  - enterprise
+  - assurance                # Premium product
+  - monitoring
+title: "NetBox Assurance Feature"
+versions:
+  cloud: "v1.10"
+  enterprise: "v1.10"
+  # Note: community not included
+---
+```
+
+#### Universal Features (All Editions)
+```yaml
+---
+tags:
+  - cloud
+  - enterprise
+  - community
+  - discovery                # Available everywhere
+title: "NetBox Discovery Feature"
+versions:
+  cloud: "v1.10"
+  enterprise: "v1.10"
+  community: "v4.2"
+---
+```
+
+#### Air-Gap Specific Features
+```yaml
+---
+tags:
+  - airgap
+  - enterprise
+  - installation
+title: "Air-Gap Installation Guide"
+versions:
+  enterprise: "v1.10"
+---
+```
+
+## Tag Selection Guidelines
+
+### Choose Edition Tags Based On:
+- **Cloud**: Features specific to NetBox Cloud hosting
+- **Enterprise**: Features in NetBox Enterprise (on-premises)
+- **Community**: Features in open source NetBox
+- **Air-Gap**: Special air-gapped deployment considerations
+
+### Choose Product Tags Based On:
+- **NetBox**: Core NetBox functionality
+- **Discovery**: Network discovery features
+- **Assurance**: Network monitoring capabilities  
+- **Operator**: AI-powered operations
+- **Branching**: NetBox Branching extension
+
+### Choose Semantic Tags Based On:
+- **Primary function**: What does this feature do?
+- **User workflow**: How do users interact with it?
+- **Technical category**: What system does it relate to?
+
+## Examples
+
+### Authentication Feature (All Editions)
+```yaml
+---
+tags:
+  - cloud
+  - enterprise
+  - community
+  - authentication
+  - sso
+  - security
+title: "SAML Authentication Setup"
+---
+```
+
+### Premium Monitoring Feature
+```yaml
+---
+tags:
+  - cloud
+  - enterprise
+  - assurance
+  - monitoring
+  - alerting
+  - notifications
+title: "NetBox Assurance Monitoring"
+---
+```
+
+### API Documentation
+```yaml
+---
+tags:
+  - cloud
+  - enterprise
+  - community
+  - rest-api
+  - automation
+  - development
+title: "REST API Reference"
+---
+```
+
+### Installation Guide
+```yaml
+---
+tags:
+  - enterprise
+  - community
+  - installation
+  - getting-started
+  - database
+title: "NetBox Installation Guide"
+---
+```
+
+## Integration Benefits
+
+### For Documentation Writers
+- Clear categorization system
+- Automatic tag page generation
+- Better content discoverability
+- Consistent tagging across all docs
+
+### For Users
+- Easy filtering by product/feature
+- Clear visual indicators of applicability
+- Better search results
+- Logical content organization
+
+### For Developers
+- Programmatic access to document metadata
+- API integration capabilities
+- Build-time content filtering
+- Enhanced navigation generation
+
+---
+
+**Product Tagging Guide** | **Last Updated**: 2025-01-27  
+**Status**: Production Ready | **Usage**: Internal Development 
\ No newline at end of file
diff --git a/ai-reference/templates/netbox-feature-doc-template.md b/ai-reference/templates/netbox-feature-doc-template.md
new file mode 100644
index 00000000..6d086154
--- /dev/null
+++ b/ai-reference/templates/netbox-feature-doc-template.md
@@ -0,0 +1,210 @@
+---
+tags: [PRODUCT_TAGS, FEATURE_TAGS, CATEGORY_TAGS]
+title: "FEATURE_NAME"
+author: "NetBox Labs"
+last_updated: "YYYY-MM-DD"
+versions:
+  netbox_cloud: "vX.X"
+  netbox_enterprise: "vX.X"
+  netbox_community: "vX.X"
+status: "current"
+description: "Brief description of the feature functionality and purpose"
+category: "features"
+audience: "TARGET_AUDIENCE"
+complexity: "COMPLEXITY_LEVEL"
+---
+
+# FEATURE_NAME
+
+<!-- Product availability pills -->
+<span class="pill pill-cloud">NetBox Cloud</span>
+<span class="pill pill-enterprise">NetBox Enterprise</span>
+<span class="pill pill-community">NetBox Community</span>
+
+<!-- Brief introduction explaining what the feature does and why it's useful -->
+FEATURE_NAME enables [brief description of what the feature does]. This feature is designed to [explain the purpose and benefits].
+
+## Overview
+
+<!-- Comprehensive overview of the feature -->
+[Provide a detailed explanation of the feature, its purpose, and how it fits into the broader NetBox ecosystem.]
+
+## Key Features
+
+<!-- List the main capabilities of the feature -->
+- **Feature 1**: Description of the first key capability
+- **Feature 2**: Description of the second key capability  
+- **Feature 3**: Description of the third key capability
+- **Feature 4**: Description of additional capabilities
+
+## Prerequisites
+
+<!-- List any requirements or dependencies -->
+Before using FEATURE_NAME, ensure you have:
+
+- [ ] Required permission levels
+- [ ] Necessary system configurations
+- [ ] Dependent features or plugins installed
+- [ ] Minimum version requirements met
+
+## Getting Started
+
+<!-- Basic setup and initial configuration -->
+### Initial Setup
+
+1. **Step 1**: Description of first setup step
+   ```bash
+   # Example command or configuration
+   ```
+
+2. **Step 2**: Description of second setup step
+   ```yaml
+   # Example configuration
+   ```
+
+3. **Step 3**: Description of third setup step
+
+### Basic Configuration
+
+<!-- Essential configuration options -->
+[Explain the basic configuration options and their purposes]
+
+## Usage Guide
+
+<!-- Step-by-step usage instructions -->
+### Common Tasks
+
+#### Task 1: [Task Name]
+1. Navigate to [location]
+2. Click [button/option]
+3. Configure [settings]
+4. Save changes
+
+#### Task 2: [Task Name]
+1. Access [feature/menu]
+2. Select [option]
+3. Complete [action]
+
+### Advanced Usage
+
+<!-- More complex usage scenarios -->
+[Describe advanced usage patterns, complex configurations, or power-user features]
+
+## API Reference
+
+<!-- API documentation if applicable -->
+### Endpoints
+
+#### GET /api/endpoint/
+Retrieve [resource] information.
+
+**Parameters:**
+- `parameter1` (optional): Description
+- `parameter2` (required): Description
+
+**Response:**
+```json
+{
+  "example": "response"
+}
+```
+
+#### POST /api/endpoint/
+Create new [resource].
+
+**Request Body:**
+```json
+{
+  "required_field": "value",
+  "optional_field": "value"
+}
+```
+
+## Configuration Options
+
+<!-- Detailed configuration reference -->
+### Settings
+
+| Setting | Type | Default | Description |
+|---------|------|---------|-------------|
+| `setting_name` | string | `default_value` | Description of what this setting controls |
+| `another_setting` | boolean | `true` | Description of another setting |
+
+### Environment Variables
+
+| Variable | Required | Description |
+|----------|----------|-------------|
+| `VARIABLE_NAME` | Yes | Description of the environment variable |
+
+## Examples
+
+<!-- Practical examples and use cases -->
+### Example 1: [Use Case Name]
+```python
+# Example code demonstrating the feature
+example_code = "implementation"
+```
+
+### Example 2: [Use Case Name]
+```yaml
+# Example configuration
+example_config:
+  setting: value
+```
+
+## Troubleshooting
+
+<!-- Common issues and solutions -->
+### Common Issues
+
+#### Issue 1: [Problem Description]
+**Symptoms:** Description of what users see
+**Cause:** Explanation of why this happens
+**Solution:** Step-by-step resolution
+
+#### Issue 2: [Problem Description]
+**Symptoms:** Description of what users see
+**Cause:** Explanation of why this happens
+**Solution:** Step-by-step resolution
+
+### Error Messages
+
+#### Error: "Error message text"
+This error occurs when [condition]. To resolve:
+1. Check [configuration/setting]
+2. Verify [requirement]
+3. Restart [service/component]
+
+## Best Practices
+
+<!-- Recommendations for optimal usage -->
+- **Practice 1**: Description and rationale
+- **Practice 2**: Description and rationale
+- **Practice 3**: Description and rationale
+
+## Limitations
+
+<!-- Known limitations or constraints -->
+- Limitation 1: Description of constraint
+- Limitation 2: Description of constraint
+- Limitation 3: Description of constraint
+
+## Related Features
+
+<!-- Links to related documentation -->
+- [Related Feature 1](../path/to/related-feature-1.md)
+- [Related Feature 2](../path/to/related-feature-2.md)
+- [Integration Guide](../integrations/related-integration.md)
+
+## Support
+
+<!-- Support information -->
+For additional help with FEATURE_NAME:
+
+- **Documentation**: [Link to additional resources]
+- **Community**: [Slack channel or forum]
+- **Support**: [Support contact information]
+
+---
+
+Last updated: [Date] | Version: [Version] | [Edit this page link] 
\ No newline at end of file
diff --git a/ai-reference/templates/product-landing-page.md b/ai-reference/templates/product-landing-page.md
new file mode 100644
index 00000000..636f596b
--- /dev/null
+++ b/ai-reference/templates/product-landing-page.md
@@ -0,0 +1,208 @@
+---
+tags: [PRODUCT_TAGS, landing-page, overview]
+title: "PRODUCT_NAME"
+author: "NetBox Labs"
+last_updated: "YYYY-MM-DD"
+versions:
+  netbox_cloud: "vX.X"
+  netbox_enterprise: "vX.X"
+  netbox_community: "vX.X"
+status: "current"
+description: "Comprehensive overview of PRODUCT_NAME features, capabilities, and getting started guide"
+category: "overview"
+audience: "all"
+complexity: "beginner"
+---
+
+# PRODUCT_NAME
+
+<!-- Product availability pills -->
+<span class="pill pill-cloud">NetBox Cloud</span>
+<span class="pill pill-enterprise">NetBox Enterprise</span>
+<span class="pill pill-community">NetBox Community</span>
+
+<!-- Hero section with compelling value proposition -->
+PRODUCT_NAME [brief description of what the product does and its primary value proposition]. [Explain how it solves key problems or enhances workflows].
+
+## Overview
+
+<!-- Comprehensive product overview -->
+[Provide a detailed explanation of the product, its purpose, target audience, and how it fits into the broader NetBox ecosystem. Include key benefits and differentiators.]
+
+## Key Features
+
+<!-- Grid of main features with brief descriptions -->
+<div class="grid cards" markdown="1">
+
+- **Feature 1 Name**
+    
+    Brief description of the first key feature and its benefits.
+    
+    [Learn more about Feature 1](feature-1.md)
+
+- **Feature 2 Name**
+    
+    Brief description of the second key feature and its benefits.
+    
+    [Learn more about Feature 2](feature-2.md)
+
+- **Feature 3 Name**
+    
+    Brief description of the third key feature and its benefits.
+    
+    [Learn more about Feature 3](feature-3.md)
+
+- **Feature 4 Name**
+    
+    Brief description of the fourth key feature and its benefits.
+    
+    [Learn more about Feature 4](feature-4.md)
+
+</div>
+
+## Getting Started
+
+<!-- Quick start guide -->
+### Quick Start
+
+Get up and running with PRODUCT_NAME in minutes:
+
+1. **Step 1**: [Initial setup or access requirement]
+   - Description of what to do
+   - Any prerequisites or requirements
+
+2. **Step 2**: [Configuration or setup step]
+   - Configuration details
+   - Links to detailed documentation
+
+3. **Step 3**: [First usage or verification step]
+   - How to verify setup
+   - Next steps or common tasks
+
+### Installation
+
+<!-- Installation instructions if applicable -->
+[Include product-specific installation instructions, or link to detailed installation guide]
+
+## Use Cases
+
+<!-- Real-world scenarios where the product adds value -->
+### Primary Use Cases
+
+#### Use Case 1: [Scenario Name]
+**Challenge:** Description of the problem or need
+**Solution:** How PRODUCT_NAME addresses this challenge
+**Benefits:** Key advantages and outcomes
+
+#### Use Case 2: [Scenario Name]
+**Challenge:** Description of the problem or need
+**Solution:** How PRODUCT_NAME addresses this challenge
+**Benefits:** Key advantages and outcomes
+
+#### Use Case 3: [Scenario Name]
+**Challenge:** Description of the problem or need
+**Solution:** How PRODUCT_NAME addresses this challenge
+**Benefits:** Key advantages and outcomes
+
+### Industry Applications
+
+<!-- Specific industry or role-based applications -->
+- **Network Operations**: [Specific benefits for network teams]
+- **Infrastructure Management**: [Specific benefits for infrastructure teams]
+- **Security**: [Specific benefits for security teams]
+- **Compliance**: [Specific benefits for compliance requirements]
+
+## Architecture
+
+<!-- Technical architecture overview -->
+### System Overview
+
+[Provide a high-level architecture diagram or description of how the product works, its components, and integration points]
+
+### Integration Points
+
+- **NetBox Integration**: How the product integrates with NetBox
+- **External Systems**: Third-party integrations and APIs
+- **Data Flow**: How data moves through the system
+
+## Product Editions
+
+<!-- Comparison of different editions if applicable -->
+### Feature Comparison
+
+| Feature | Community | Cloud | Enterprise |
+|---------|-----------|-------|------------|
+| Core Functionality | ✅ | ✅ | ✅ |
+| Advanced Feature 1 | ❌ | ✅ | ✅ |
+| Advanced Feature 2 | ❌ | ✅ | ✅ |
+| Enterprise Feature 1 | ❌ | ❌ | ✅ |
+| Enterprise Feature 2 | ❌ | ❌ | ✅ |
+
+### Choosing the Right Edition
+
+- **Community**: Best for [specific use cases]
+- **Cloud**: Ideal for [specific use cases]
+- **Enterprise**: Perfect for [specific use cases]
+
+## Documentation Structure
+
+<!-- Navigation guide for the documentation -->
+### Getting Started
+- [Installation Guide](installation.md)
+- [Quick Start Tutorial](quick-start.md)
+- [Basic Configuration](basic-configuration.md)
+
+### User Guides
+- [Feature 1 Guide](feature-1-guide.md)
+- [Feature 2 Guide](feature-2-guide.md)
+- [Advanced Usage](advanced-usage.md)
+
+### Administration
+- [Administration Guide](administration.md)
+- [Security Configuration](security.md)
+- [Troubleshooting](troubleshooting.md)
+
+### Developer Resources
+- [API Reference](api-reference.md)
+- [Integration Guide](integration-guide.md)
+- [SDK Documentation](sdk-docs.md)
+
+## What's New
+
+<!-- Recent updates and improvements -->
+### Recent Updates
+
+#### Version X.X (Latest)
+- New feature or improvement
+- Bug fixes and performance enhancements
+- Updated documentation and examples
+
+[View full changelog](changelog.md)
+
+## Support and Community
+
+<!-- Support resources and community links -->
+### Getting Help
+
+- **Documentation**: Comprehensive guides and references
+- **Community**: Join the discussion on [Slack](https://netdev.chat/) in the `#netbox` channel
+- **Support**: [Contact support](mailto:support@netboxlabs.com) for technical assistance
+
+### Training and Certification
+
+- **Training Programs**: [Link to training resources]
+- **Certification**: [Link to certification programs]
+- **Best Practices**: [Link to best practices guides]
+
+## Next Steps
+
+<!-- Clear call-to-action for next steps -->
+Ready to get started with PRODUCT_NAME?
+
+1. **Try it now**: [Link to getting started guide]
+2. **Explore features**: [Link to feature documentation]
+3. **Join the community**: [Link to community resources]
+
+---
+
+*PRODUCT_NAME is developed and maintained by NetBox Labs. For enterprise support and advanced features, consider [NetBox Enterprise](../netbox-enterprise/overview.md) or [NetBox Cloud](../cloud/overview.md).* 
\ No newline at end of file
diff --git a/ai-reference/templates/semantic-tagging-usage.md b/ai-reference/templates/semantic-tagging-usage.md
new file mode 100644
index 00000000..288b5c71
--- /dev/null
+++ b/ai-reference/templates/semantic-tagging-usage.md
@@ -0,0 +1,339 @@
+---
+tags:
+  - ai-reference
+  - template
+  - cloud
+  - enterprise
+  - community
+  - discovery
+  - semantic-tagging
+  - examples
+author: "NetBox Labs Documentation Team"
+last_updated: "2025-01-27"
+category: "template"
+audience: "developers"
+complexity: "beginner"
+description: "Examples and usage patterns for the semantic tagging system"
+internal_only: true
+draft: true
+---
+
+# Semantic Tagging Usage Examples
+
+## Overview
+
+This template demonstrates proper usage of the comprehensive tagging system with real-world examples across different types of NetBox documentation.
+
+## Tag Categories
+
+### Edition Tags (Prominent Pills)
+- `cloud` - NetBox Cloud features
+- `enterprise` - NetBox Enterprise features  
+- `community` - NetBox Community features
+- `airgap` - Air-gapped deployment features
+
+### Product Tags (Regular Display)
+- `netbox` - Core NetBox functionality
+- `discovery` - Network discovery features
+- `assurance` - Network monitoring capabilities
+- `operator` - AI-powered operations
+- `branching` - NetBox Branching extension
+
+### Semantic Tags (Smaller Display)
+- Authentication, security, database, APIs, monitoring, etc.
+
+## Usage Examples
+
+### 1. Universal Core Feature
+**Use Case**: A feature available in all NetBox editions
+
+```yaml
+---
+tags:
+  - cloud
+  - enterprise
+  - community
+  - netbox
+  - rest-api
+  - automation
+title: "REST API Authentication"
+description: "Configure API authentication across all NetBox editions"
+versions:
+  cloud: "v1.10"
+  enterprise: "v1.10"
+  community: "v4.2"
+status: "current"
+category: "integration"
+audience: "developers"
+complexity: "intermediate"
+---
+```
+
+### 2. Premium Monitoring Feature
+**Use Case**: NetBox Assurance feature (Cloud/Enterprise only)
+
+```yaml
+---
+tags:
+  - cloud
+  - enterprise
+  - assurance
+  - monitoring
+  - alerting
+  - notifications
+title: "NetBox Assurance Monitoring Setup"
+description: "Configure network monitoring and alerting in NetBox Assurance"
+versions:
+  cloud: "v1.10"
+  enterprise: "v1.10"
+  # Note: community not included - premium feature
+status: "current"
+category: "feature"
+audience: "administrators"
+complexity: "intermediate"
+---
+```
+
+### 3. Discovery Feature (All Editions)
+**Use Case**: Network discovery available everywhere
+
+```yaml
+---
+tags:
+  - cloud
+  - enterprise
+  - community
+  - discovery
+  - networking
+  - automation
+  - getting-started
+title: "Network Discovery Configuration"
+description: "Set up automated network discovery across your infrastructure"
+versions:
+  cloud: "v1.10"
+  enterprise: "v1.10"
+  community: "v4.2"
+status: "current"
+category: "feature"
+audience: "administrators"
+complexity: "beginner"
+---
+```
+
+### 4. Authentication Setup (Universal)
+**Use Case**: SSO configuration for all editions
+
+```yaml
+---
+tags:
+  - cloud
+  - enterprise
+  - community
+  - authentication
+  - sso
+  - saml
+  - security
+  - configuration
+title: "SAML SSO Configuration"
+description: "Configure SAML single sign-on for NetBox authentication"
+versions:
+  cloud: "v1.10"
+  enterprise: "v1.10"
+  community: "v4.2"
+status: "current"
+category: "admin"
+audience: "administrators"
+complexity: "advanced"
+---
+```
+
+### 5. Installation Guide (Enterprise/Community)
+**Use Case**: Installation instructions (not applicable to Cloud)
+
+```yaml
+---
+tags:
+  - enterprise
+  - community
+  - installation
+  - getting-started
+  - database
+  - configuration
+title: "NetBox Installation Guide"
+description: "Complete installation guide for NetBox Enterprise and Community"
+versions:
+  enterprise: "v1.10"
+  community: "v4.2"
+  # Note: cloud not included - installation not applicable
+status: "current"
+category: "getting-started"
+audience: "administrators"
+complexity: "intermediate"
+---
+```
+
+### 6. Air-Gap Deployment (Enterprise Only)
+**Use Case**: Air-gapped deployment specific to Enterprise
+
+```yaml
+---
+tags:
+  - airgap
+  - enterprise
+  - installation
+  - security
+  - deployment
+title: "Air-Gap Deployment Guide"
+description: "Deploy NetBox Enterprise in air-gapped environments"
+versions:
+  enterprise: "v1.10"
+  # Note: Air-gap specific to Enterprise deployments
+status: "current"
+category: "deployment"
+audience: "administrators"
+complexity: "advanced"
+---
+```
+
+### 7. API Development (All Editions)
+**Use Case**: API usage examples for developers
+
+```yaml
+---
+tags:
+  - cloud
+  - enterprise
+  - community
+  - rest-api
+  - graphql
+  - development
+  - automation
+  - scripting
+title: "API Development Examples"
+description: "Code examples for NetBox API integration and automation"
+versions:
+  cloud: "v1.10"
+  enterprise: "v1.10"
+  community: "v4.2"
+status: "current"
+category: "integration"
+audience: "developers"
+complexity: "intermediate"
+---
+```
+
+### 8. Plugin Development (Community Focus)
+**Use Case**: Custom plugin development
+
+```yaml
+---
+tags:
+  - community
+  - enterprise
+  - plugins
+  - customization
+  - development
+  - extensibility
+title: "Custom Plugin Development"
+description: "Create custom NetBox plugins for extended functionality"
+versions:
+  enterprise: "v1.10"
+  community: "v4.2"
+  # Note: Cloud doesn't support custom plugins
+status: "current"
+category: "development"
+audience: "developers"
+complexity: "advanced"
+---
+```
+
+### 9. Backup and Maintenance (Enterprise/Community)
+**Use Case**: Database backup procedures
+
+```yaml
+---
+tags:
+  - enterprise
+  - community
+  - database
+  - backup
+  - maintenance
+  - administration
+title: "Database Backup Procedures"
+description: "Backup and maintenance procedures for NetBox databases"
+versions:
+  enterprise: "v1.10"
+  community: "v4.2"
+  # Note: Cloud backups are managed automatically
+status: "current"
+category: "admin"
+audience: "administrators"
+complexity: "intermediate"
+---
+```
+
+### 10. Beta Feature Documentation
+**Use Case**: New feature in beta testing
+
+```yaml
+---
+tags:
+  - cloud
+  - enterprise
+  - operator
+  - automation
+  - beta
+title: "NetBox Operator AI Features (Beta)"
+description: "New AI-powered automation features in NetBox Operator"
+versions:
+  cloud: "v1.10"
+  enterprise: "v1.10"
+status: "beta"
+category: "feature"
+audience: "administrators"
+complexity: "intermediate"
+---
+```
+
+## Tag Selection Guidelines
+
+### Choose Edition Tags Based On:
+- **Where the feature is available**: Cloud, Enterprise, Community, or Air-gap
+- **Deployment model**: Hosted (Cloud) vs self-hosted (Enterprise/Community)
+- **Licensing**: Open source (Community) vs commercial (Cloud/Enterprise)
+
+### Choose Product Tags Based On:
+- **Core functionality**: Use `netbox` for basic NetBox features
+- **Specialized products**: Use `discovery`, `assurance`, `operator`, `branching`
+- **Feature category**: What product area does this relate to?
+
+### Choose Semantic Tags Based On:
+- **Primary function**: What does this feature accomplish?
+- **User workflow**: How do users interact with it?
+- **Technical domain**: Database, API, security, etc.
+- **Complexity level**: Getting started, configuration, development
+
+## Best Practices
+
+### Do's ✅
+- Use edition tags to clearly indicate product availability
+- Include semantic tags that describe the feature's purpose
+- Add version information for all applicable products
+- Use appropriate status (current/beta/coming-soon)
+- Include audience and complexity metadata
+
+### Don'ts ❌
+- Don't use edition tags for products that don't support the feature
+- Don't over-tag - focus on the most relevant 3-5 semantic tags
+- Don't forget to update version numbers when content changes
+- Don't use deprecated HTML pill syntax
+
+### Tag Hierarchy
+1. **Edition tags** (prominent pills at top)
+2. **Product tags** (regular tags below content)
+3. **Semantic tags** (smaller tags for categorization)
+
+---
+
+**Semantic Tagging Usage** | **Last Updated**: 2025-01-27  
+**Status**: Production Ready | **Usage**: Internal Development Template 
\ No newline at end of file
diff --git a/docs/.gitkeep b/docs/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/docs/CNAME b/docs/CNAME
deleted file mode 100644
index 9d53a28b..00000000
--- a/docs/CNAME
+++ /dev/null
@@ -1 +0,0 @@
-docs.netboxlabs.com
\ No newline at end of file
diff --git a/docs/administration-console/azure-ad-sso-setup.md b/docs/administration-console/azure-ad-sso-setup.md
deleted file mode 100644
index f6486378..00000000
--- a/docs/administration-console/azure-ad-sso-setup.md
+++ /dev/null
@@ -1,86 +0,0 @@
----
-tags:
-  - cloud
-  - authentication
-  - administration
-  - configuration
-  - getting-started
-  - integration
-versions:
-  netbox_cloud: "v1.10"
-status: "current"
----
-
-# Microsoft Entra ID Setup (formerly Azure Active Directory)
-
-This guide explains how to configure single sign-on (SSO) support for NetBox Cloud using Microsoft Entra ID (formerly Azure Active Directory) as an authentication backend.
-
-## Entra ID Configuration
-1. Create a test user (optional)
-Create a new Entra ID user to be used for testing. You can skip this step if you already have a suitable account created.
-
-2. Create an app registration
-Under the Microsoft Entra ID dashboard, navigate to **Add** > **App registration**.
-
-    ![Add an app registration](../images/azure-sso/azure_ad_add_app_registration.png)
-
-    Enter a name for the registration (e.g. "NetBox Cloud") and ensure that the "single tenant" option is selected.
-
-    Under "Redirect URI", select "Web" for the platform and enter the path to your NetBox Cloud installation, ending with /oauth/complete/azuread-oauth2/. 
-
-    Eg. https://{your-domain}.cloud.netboxapp.com/oauth/complete/azuread-oauth2/
-
-    ![Add an app registration](../images/azure-sso/azure_ad_app_registration.png)
-
-    Once finished, make note of the application (client) ID; this will be used when configuring NetBox Cloud.
-
-    ![Completed app registration](../images/azure-sso/azure_ad_app_registration_created.png)
-
-
-    **Multitenant authentication**
-
-    NetBox also supports multitenant authentication via Entra ID, however it requires a different backend and an additional configuration parameter. Please see the `python-social-auth` [documentation](https://python-social-auth.readthedocs.io/en/latest/backends/azuread.html#tenant-support) for details concerning multitenant authentication.
-
-3. Create a secret
-
-    When viewing the newly-created app registration, click the "Add a certificate or secret" link under "Client credentials". Under the "Client secrets" tab, click the "New client secret" button.
-
-    ![Add a client secret](../images/azure-sso/azure_ad_add_client_secret.png)
-
-    You can optionally specify a description and select a lifetime for the secret.
-
-    ![Client secret parameters](../images/azure-sso/azure_ad_client_secret.png)
-
-    Once finished, make note of the secret value (not the secret ID); this will be used when configuring NetBox Cloud.
-
-    ![Client secret parameters](../images/azure-sso/azure_ad_client_secret_created.png)
-
-## NetBox Cloud Configuration
-
-Securely share the following configuration parameters with [NetBox Labs Support](mailto:support@netboxlabs.com), substituting your own values:
-
-REMOTE_AUTH_BACKEND = 'social_core.backends.azuread.AzureADOAuth2'
-SOCIAL_AUTH_AZUREAD_OAUTH2_KEY = '{APPLICATION_ID}'
-SOCIAL_AUTH_AZUREAD_OAUTH2_SECRET = '{SECRET_VALUE}'
-
-The support team will add these parameters to your NetBox Cloud instance and confirm when this is ready for testing.
-
-## Testing
-Log out of NetBox Cloud if already authenticated, and click the "Log In" button at top right. You should see the normal login form as well as an option to authenticate using Entra ID. Click that link.
-
-![NetBox Entra ID login form](../images/azure-sso/netbox_azure_ad_login.png)
-
-You should be redirected to Microsoft's authentication portal. Enter the username/email and password of your account to continue. You may also be prompted to grant this application access to your account.
-
-![Microsoft authentication portal](../images/azure-sso/azure_ad_login_portal.png)
-
-If successful, you will be redirected back to the NetBox Cloud UI, and will be logged in as the Entra ID user. You can verify this by navigating to your profile (using the button at top right).
-
-This user account has been replicated locally to NetBox Cloud, and can now be assigned groups and permissions within the NetBox Cloud admin UI.
-
-## Troubleshooting
-### Redirect URI does not Match
-Entra ID requires that the authenticating client request a redirect URI that matches what you've configured for the app in step two. This URI must begin with https:// 
-
-### Not Logged in After Authenticating
-If you are redirected to the NetBox Cloud UI after authenticating successfully, but are not logged in, double-check the configured backend and app registration. The instructions in this guide pertain only to the `azuread.AzureADOAuth2` backend using a single-tenant app registration.
diff --git a/docs/administration-console/azure-group-mapping.md b/docs/administration-console/azure-group-mapping.md
deleted file mode 100644
index 3d9ac87e..00000000
--- a/docs/administration-console/azure-group-mapping.md
+++ /dev/null
@@ -1,57 +0,0 @@
----
-tags:
-  - cloud
-  - netbox
-  - administration
-  - authentication
-  - azure-ad
-  - configuration
-versions:
-  netbox_cloud: "v1.10"
-status: "current"
----
-
-# Group Mapping For Microsoft Entra ID Single Sign-On (SSO)
-
-Upgrade your Single Sign-On experience with Group Mapping for Microsoft Entra ID SSO – a smarter, more secure way to manage user access. The Group Mapping feature for Entra ID Single Sign-On, streamlines the synchronization of group memberships from Microsoft Entra ID to groups in NetBox Cloud, allowing you to align your user access efficiently and accurately. 
-
-!!! info
-    This feature is only available in Pro/Enterprise tiers.
-
-Changes in Microsoft Entra ID groups are reflected in NetBox Cloud, ensuring up-to-date access management and enhanced security. You can tailor the group mapping to your organizational needs while maintaining strict security and compliance standards.
-
-If you are already securing access to NetBox Cloud using Entra ID for SSO, and would like use the Group Mapping feature it's easy to get set up. Simply create your groups and permissions in NetBox Cloud, then set up your groups in Entra ID and reach out to the support team at NetBox Labs and we will take care of the group mappings for you to suit your requirements. 
-
-!!! note
-    We've made some important updates to the Entra ID user group sync feature that may affect group memberships and permissions of Entra ID SSO users accessing NetBox Cloud. To support enterprise Entra ID environments, we've added pagination to retrieve large lists (100+) of membership groups for users. To support NetBox group assignments from Entra ID nested groups, we've changed the Microsoft API endpoint used for group retrieval from [`memberOf`](https://learn.microsoft.com/en-us/graph/api/user-list-memberof) to [`transitiveMemberOf`](https://learn.microsoft.com/en-us/graph/api/user-list-transitivememberof). 
-    
-    This means that users will now be made members of NetBox user groups based on the configured group mappings for both direct membership Entra ID groups and transitive Entra ID groups (parent groups of direct membership groups). Under specific conditions, users may gain additional group memberships and permissions. We strongly advise you review your NetBox Cloud and Entra ID user, group and permission configurations to ensure they align to your security requirements.
-
-Watch the video below for a step-by-step example of how the Group Mapping feature works, or read on for an explanation. 
-
-<iframe width="560" height="315" src="https://www.youtube.com/embed/Vg0xpWJiKAs?si=0UElAwKzWIrKzgHH" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
-
-## How it Works
-
-Group mappings are based on the **Object ID** of the group in Entra ID. For example: 
-
-![Entra ID Group Object ID](../images/azure-sso/azure_group_sync_1.png)
-
-The **Object ID** is mapped to a group in NetBox Cloud, and that group could have permissions assigned to it. For example, this group called **CircuitManager** in NetBox Cloud has permissions assigned to it that allows members of the group to manage all of the **Circuit** and  **Provider** object types: 
-
-![NetBox Group Configuration](../images/azure-sso/azure_group_sync_2.png)
-
-![NetBox Group Permissions](../images/azure-sso/azure_group_sync_3.png)
-
-Optionally, members of the Entra ID groups can also be members of the NetBox built-in groups **Staff** which allows access to the NetBox admin interface, and **Superuser** which has all permissions without explicitly assigning them.
-
-The NetBox Labs support team will map your Entra ID Group Object ID's to your NetBox Cloud groups, for example: 
-
-| Entra ID Group Object ID | NetBox Cloud Group | Staff | Super User |
-| -------- | ------- |-------- | ------- |
-| 1a36bed9-3bdc-4970-ab66-faf9704e0af4 | Circuit Manager | Yes | No | 
-
-## How Do I Get it Set Up?
-Simply provide us with your requirements in terms of object IDs and NetBox groups and we will take care of the rest. 
-
-If you have any questions about Group Mapping for Entra ID Single Sign-On (SSO), please raise a support ticket by emailing the [NetBox Labs Support Team](mailto:support@netboxlabs.com).
diff --git a/docs/administration-console/console-access.md b/docs/administration-console/console-access.md
deleted file mode 100644
index 682f5bc6..00000000
--- a/docs/administration-console/console-access.md
+++ /dev/null
@@ -1,80 +0,0 @@
----
-tags:
-  - cloud
-  - netbox
-  - administration
-  - getting-started
-  - authentication
-  - security
-  - configuration
-  - troubleshooting
-versions:
-  netbox_cloud: "v1.10"
-status: "current"
----
-
-# NetBox Cloud Console Access
-
-You should already have access to the NetBox Labs [Console](https://console.netboxlabs.com/dashboard/) when you sign up for NetBox Cloud.
-
-## How to Access the Console
-
-There are two ways to access the NetBox Labs Console:
-
-### Option 1: Direct URL Access
-
-Simply go directly to the [NetBox Labs Console](https://console.netboxlabs.com/dashboard/) in your browser.
-
-### Option 2: Access from NetBox Cloud UI
-
-From within the NetBox Cloud Web Interface, you can easily switch to the NetBox Labs Console:
-
-1. In the left hand main menu, click to expand the **NetBox Labs plugin** menu, and then click on **Open Console**:
-
-    ![netbox labs plugin](../images/console/admin_console_from_ui_1.png)
-
-2. This will take you directly to the NetBox Labs Console login page.
-
-## Requesting Console Access
-
-If you don't already have access to the console, you can request it by:
-
-- Clicking **Request Console Access** in the **NetBox Labs plugin** menu from the NetBox Cloud web interface
-- Then clicking the link to email the [NetBox Labs Support Team](mailto:support@netboxlabs.com) to request access
-
-![request console access](../images/console/admin_console_from_ui_3.png)
-
-!!! note
-    If you encounter any issues when accessing the NetBox Labs Console, raise a support ticket by emailing the [NetBox Labs Support Team](mailto:support@netboxlabs.com)
-
-## Login and Account Setup
-
-The NetBox Cloud team will set up your account with your email address as the username. You can login to the NetBox Labs Console using:
-
-- **Email/Password**: Your email address and the password you set up when your account was created
-- **Single Sign-On (SSO)**: Providers such as Google, GitHub, and Microsoft
-- **Enterprise SSO**: Your organization's Identity Provider (IdP) if configured
-
-![netbox labs console login](../images/console/admin-console-login.png)
-
-## Using the Console
-
-Once logged in, you will see all the NetBox Cloud instances running under your Organization, which you can administer from the console.
-
-![view instances](../images/console_access/view_instances.png)
-
-### Accessing Your NetBox Cloud Instances
-
-To access a specific NetBox Cloud instance:
-
-1. **Get the credentials**: Click to reveal or copy the admin credentials from the **Credentials** section:
-
-    ![retrieve admin credentials](../images/console_access/get_credentials.png)
-
-2. **Open the instance**: Click on either of the links to open the NetBox Cloud interface in a new browser window:
-
-    ![launch ui](../images/console_access/launch_ui.png)
-
-3. **Login to NetBox Cloud**: Use the username and password you copied from step 1:
-
-    ![admin login](../images/console_access/admin_login.png)
diff --git a/docs/administration-console/console-administration.md b/docs/administration-console/console-administration.md
deleted file mode 100644
index 56fa058e..00000000
--- a/docs/administration-console/console-administration.md
+++ /dev/null
@@ -1,76 +0,0 @@
----
-tags:
-  - cloud
-  - netbox
-  - administration
-  - configuration
-  - security
-  - users
-versions:
-  netbox_cloud: "v1.10"
-status: "current"
----
-
-# Console Administration
-
-This guide covers administrative tasks for the NetBox Labs Console, including managing administrator accounts and console settings.
-
-## Managing Administrator Accounts
-
-### Inviting Additional Administrators
-
-To invite additional administrators to the NetBox Cloud Console:
-
-1. Login to the [NetBox Labs Console](https://console.netboxlabs.com/)
-
-2. Click on **Settings** and then click on **Administrators**:
-
-    ![console settings admin](../images/console/console-settings-admin.png)
-
-3. Enter the email address for the administrator you wish to invite and then click **Invite**:
-
-    ![console email invite](../images/console/console-email-invite.png)
-
-4. The invited user will receive an email with instructions to set up their console account
-
-### Administrator Permissions
-
-Console administrators have access to:
-
-- **Instance Management**: Start, stop, and monitor NetBox Cloud instances
-- **User Management**: Invite and manage other console administrators  
-- **Configuration Access**: View and modify instance configurations
-- **Backup Operations**: Create, download, and restore database backups
-- **Upgrade Management**: Manage NetBox version upgrades
-- **Support Access**: View logs and system information for troubleshooting
-
-## Console Settings
-
-### Organization Settings
-
-Console administrators can manage organization-level settings including:
-
-- **Billing Information**: View and update billing details
-- **Instance Limits**: Monitor usage against plan limits
-- **Support Contacts**: Manage support ticket routing
-
-### Security Settings
-
-- **Access Control**: Manage who can access the console
-- **Activity Monitoring**: Review console access logs
-- **Session Management**: Configure timeout settings
-
-## Best Practices
-
-### Administrator Management
-- **Limit Administrator Access**: Only grant console admin access to users who need it
-- **Regular Review**: Periodically review and remove unnecessary admin accounts
-- **Use Corporate Email**: Ensure all administrators use corporate email addresses
-
-### Security
-- **Enable 2FA**: Require two-factor authentication for all administrators
-- **Monitor Activity**: Regularly review console access logs
-- **Incident Response**: Have a plan for responding to security incidents
-
-!!! note
-    If you encounter any issues with console administration, raise a support ticket by emailing the [NetBox Labs Support Team](mailto:support@netboxlabs.com) 
\ No newline at end of file
diff --git a/docs/administration-console/console-overview.md b/docs/administration-console/console-overview.md
deleted file mode 100644
index 459a4f53..00000000
--- a/docs/administration-console/console-overview.md
+++ /dev/null
@@ -1,112 +0,0 @@
----
-tags:
-  - cloud
-  - netbox
-  - administration
-  - getting-started
-  - configuration
-  - networking
-  - automation
-versions:
-  netbox_cloud: "v1.10"
-status: "current"
----
-
-# NetBox Cloud: Administrative Console Overview
-
-## Console Access
-
-For detailed instructions on accessing the console, see [Getting Console Access](console-access.md). 
-
-This overview focuses on the features and interface of the Administrative Console once you're logged in.
-
-## Summary View
-This compressed full page screenshot breaks the full Administrative Console down into similar sections.  Each section is designed to give you greater insight to your NetBox instance.
-
-![summary view](../images/console/console_summary_view.png)
-
-## Section Breakdown
-
-### 1. Information Panel
-
-![information panel](../images/console/info_panel.png)
-
-The Information Panel provides a view of basic information relating to your NetBox Cloud instance.  Here you will find the name of your NetBox Cloud instance within your Organization's Namespace, along with the AWS Region and the NetBox version. You also have a link to the instance raw URL, plus a refresh button for the instance data. 
-
-### 2. NetBox Deployment 
-
-![deployment](../images/console/deployment.png)
-
-The NetBox Deployment panel lists various service and configuration status points.  Included will be the current version, and version upgrade controls, the number of instance replicas, and resource allocations. The instance image and namespace are also listed here.  
-
-- The left circle icon (stop button) will stop the running NetBox Cloud instance.
-- The center circle icon (play button) will start the NetBox Cloud instance.
-- The right refresh icon will refresh the data in the panel. 
-- The Version number with the smaller font displays the current NetBox version
-- The Version drop down lists versions of NetBox that can be changed to.
-- The cloud icon will illuminate if you select a different version of NetBox.
-- The cloud icon will change NetBox to the selected version.
-
-The Secrets section provides access to the current secret credentials for the instance API Token, local "admin" user account and Secret Key.  When the Administrative Console initially loads these values will be hidden.  
-
-- Clicking the open eye will reveal the secret details
-- Clicking the closed eye will conceal the secret details
-- Clicking the copy icon will copy the secret to your clipboard
-
-### 3. Ingress
-
-![ingress](../images/console/ingress.png)
-
-The Ingress panel gives the Name, Domain and DNS Name information for the NetBox Cloud instance, as well as the number of Ingress Pods and the Load Balancer status.
-
-### 4. Storage
-
-![storage](../images/console/storage.png)
-
-The Storage Panel contains information on the storage bucket, user, and access key ID. Clicking the open eye will reveal the Access Key secret details.
-
-### 5. Postgres
-
-![database](../images/console/database.png)
-
-The Postgres Database panel (left) gives the current status of the database, along with details of the host, username and database name for the instance. Clicking the open eye will reveal the Postgres Database secret details.
-
-The Postgres panel (right) gives the number of database instances, their status, instance names, version, Aurora capacity unit consumption, current configured backup retention period, and security group IDs. Clicking the open eye will reveal the Postgres secret details.
-
-### 6. Redis
-
-![database](../images/console/redis.png)
-
-The Redis Database panel (left) gives the name, status, host, user, and ID of the Main and Cache Redis databases. 
-
-The Redis panel (right) gives the name, status, resource, image and version information for the Redis instance. Clicking the open eye will reveal the Redis secret details.
-
-
-### 7. Advanced Configuration
-
-#### 7b. Ingress Allow List
-
-![ingress allow list](../images/console/ingress_allow_list.png)
-
-If the Ingress Allow List is configured, then inbound Web/API traffic will only be permitted to either IPv4 or IPv6 CIDR ranges listed on the Ingress Allow List. 
-
-#### 7c. NetBox Configmap ENV
-
-![configmap env](../images/console/configmap_env_full.png)
-
-This NetBox Configmap ENV allows you to view or manage the underlying variables for the instance
-
-#### 7d. NetBox Startup Configmaps
-
-![startup configmaps](../images/console/startup_configmaps.png)
-
-The NetBox Startup Configmaps (redacted screenshot) allows you to view or manage the underlying configmaps for the instance.
-
-### 8. Pod Info/Logs
-
-![pod info logs](../images/console/pods.png)
-
-The Pods screen allows you to view the underlying composition of the instance.  This includes versions, operational status, vCPU and Memory information.
-
-- The refresh button will give you the up-to-date information for all pods.
-- The multi line icon will load the current log for the selected object in each pod.
diff --git a/docs/administration-console/free-plan-features.md b/docs/administration-console/free-plan-features.md
deleted file mode 100644
index d166a415..00000000
--- a/docs/administration-console/free-plan-features.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-hide:
-  - navigation
-  - toc
-tags:
-  - cloud
-  - netbox
-  - administration
-  - getting-started
-  - configuration
-  - billing
-  - features
-  - limitations
-  - networking
-  - automation
-versions:
-  netbox_cloud: "v1.10"
-status: "current"
----
-
-# NetBox Cloud Free Plan Features
-
-The NetBox Cloud Free Plan is perfect for small networks, lab environments, and targeted use cases. It includes up to 100 devices, 500 IP addresses, 10k API requests/month, and 2 operational branches. 
-
-## Free Plan Features in Detail
-
-The following features are enabled in the NetBox Cloud Free Plan: 
-
-- **Devices**: 100
-- **IP Addresses**: 500
-- **API Requests**: 10,000 per month
-- **File Upload Size**: Maximum 5MB 
-- **Backup Frequency**: Once per day
-- **Branching Enabled**: Maximum of 2 operational branches
-- **Prefix List Entries**: Maximum of 10 entries
-- **Upgrades**: Automatic
-
-If you need more, or you need features like advanced SSO, Plugins, Webhooks, Custom Scripts, Custom Hostnames, the ability to work with backups, commercial support, and more, check out our [paid plans](https://netboxlabs.com/pricing/).
diff --git a/docs/administration-console/free-plan-new-user.md b/docs/administration-console/free-plan-new-user.md
deleted file mode 100644
index b19090cf..00000000
--- a/docs/administration-console/free-plan-new-user.md
+++ /dev/null
@@ -1,41 +0,0 @@
----
-tags:
-  - cloud
-  - netbox
-  - administration
-  - getting-started
-  - configuration
-  - billing
-versions:
-  netbox_cloud: "v1.10"
-status: "current"
----
-
-# Add a New User to Free Plan
-
-To invite a new user to a NetBox Cloud Free instance, the user will need to have a valid email address, and be added as an administrator in the NetBox Labs Console.
-
-1. From within the [NetBox Labs Console](https://console.netboxlabs.com), expand **Settings** and select **Administrators**
-
-    ![netbox console admin nav](../images/console/console_administrators_nav.png)
-
-2. Type the user's email address in the box, and click **Invite**
-
-    ![netbox console admin invite](../images/console/console_administrators_invite.png)
-
-3. Click **Continue** to confirm the email address to be invited
-
-    ![netbox console admin invite confirm](../images/console/console_administrators_invite_confirm.png)
-
-4. An email will be sent containing a temporary password for the Console
-
-5. Have the user login with the temporary information, and it will prompt for a new password to be set
-
-6. The user can now login to the Console and click the link to access the instance
-
-    ![netbox console click instance link](../images/console/console_click_instance_link.png)
-
-7. Login to the instance by clicking the auth button and using the same credentials that were just setup
-
-    ![netbox console auth button](../images/console/instance_click_login.png)
-    ![netbox console login](../images/console/instance_login.png)
\ No newline at end of file
diff --git a/docs/administration-console/managing-hostnames.md b/docs/administration-console/managing-hostnames.md
deleted file mode 100644
index aec6ab2e..00000000
--- a/docs/administration-console/managing-hostnames.md
+++ /dev/null
@@ -1,41 +0,0 @@
----
-tags:
-  - cloud
-  - netbox
-  - administration
-  - networking
-  - configuration
-  - dns
-versions:
-  netbox_cloud: "v1.10"
-status: "current"
----
-
-# NetBox Cloud Hostnames
-
-1. From within the [NetBox Labs Console](https://console.netboxlabs.com) click on **Settings** and then **Hostnames Manager** in the left-hand main menu to view the settings for your Organization: 
-
-    ![netbox labs console](../images/console/settings.png)
-
-2. From here you can view the Hostnames configured for your organization. Under **NetBox** you can see which NetBox instance is associated with a given hostname, and what **Category** the hostname is: 
-
-    ![netbox labs console](../images/console/hostnames_view.png)
-
-
-## Hostname Categories: 
-
-Hostname categories are defined as follows: 
-
-| Category | Definition | 
-|----------|------------|
-| `platform random` | A randomly generated hostname created when a new NetBox Cloud instance is created, usually as a trial. | 
-| `platform custom` | A custom hostname on the NetBox Cloud platform (e.g., `abcwidgets.cloud.netboxapp.com`) - available for all paid plans. |   
-| `org custom` | A custom hostname using your organization's own domain (e.g., `netbox-prod.abcwidgets.com`) - available for Professional and Enterprise plans. |  
-
-# Custom Hostnames
-
-## Platform Custom Hostnames
-Platform Custom Hostnames (e.g., `yourcompany.cloud.netboxapp.com`) are available for all NetBox Cloud paid plans and are typically set up automatically when you subscribe to a paid plan.
-
-## Organization Custom Hostnames 
-Organization Custom Hostnames allow you to use your own domain name (e.g., `netbox.yourcompany.com`) and are available for NetBox Cloud **Professional** and **Enterprise** plans. If you would like to set up an organization custom hostname, please raise a support ticket by emailing the [NetBox Labs Support Team](mailto:support@netboxlabs.com). 
diff --git a/docs/administration-console/netbox-cloud-plugins.md b/docs/administration-console/netbox-cloud-plugins.md
deleted file mode 100644
index f9cf141c..00000000
--- a/docs/administration-console/netbox-cloud-plugins.md
+++ /dev/null
@@ -1,26 +0,0 @@
----
-tags:
-  - cloud
-  - netbox
-  - administration
-  - configuration
-  - plugins
-versions:
-  netbox_cloud: "v1.10"
-status: "current"
----
-
-# NetBox Cloud Plugins
-
-From within the NetBox Labs Console, you can easily view installed NetBox Cloud **Plugins**, along with their **Scope** and **Version number**. Simply follow these steps: 
-
-1. From within the [NetBox Labs Console](https://console.netboxlabs.com) click on the three dots in the top right corner of the NetBox Instance panel, and click **Overview**   
-
-    ![netbox cloud plugins](../images/console/netbox-cloud-plugins_1.png)
-
-2. Scroll down to view the list of installed **Plugins**, their scopes and version numbers:
-
-    ![netbox cloud plugins](../images/console/netbox-cloud-plugins_2.png)
-
-    !!! info
-        There are two types of plugin scope - **public** for any plugins that are publicly available and **organization** for custom plugins.
\ No newline at end of file
diff --git a/docs/administration-console/okta-group-mapping.md b/docs/administration-console/okta-group-mapping.md
deleted file mode 100644
index b900ebd2..00000000
--- a/docs/administration-console/okta-group-mapping.md
+++ /dev/null
@@ -1,44 +0,0 @@
----
-tags:
-  - cloud
-  - netbox
-  - administration
-  - authentication
-  - configuration
-versions:
-  netbox_cloud: "v1.10"
-status: "current"
----
-
-# Group Mapping For Okta Single Sign-On (SSO)
-
-Upgrade your Single Sign-On experience with Group Mapping for Okta SSO – a smarter, more secure way to manage user access. The Group Mapping feature for Okta Single Sign-On, streamlines the synchronization of group memberships from Okta to groups in NetBox Cloud, allowing you to align your user access efficiently and accurately. 
-
-Changes in Okta groups are reflected in NetBox Cloud, ensuring up-to-date access management and enhanced security. You can tailor the group mapping to your organizational needs while maintaining strict security and compliance standards.
-
-If you are already securing access to NetBox Cloud using Okta for SSO, and would like use the Group Mapping feature it's easy to get set up. Simply create your groups and permissions in NetBox Cloud, then set up your groups in Okta and reach out to the support team at NetBox Labs and we will take care of the group mappings for you to suit your requirements. 
-
-> ℹ️ Note
-> 
-> This feature is only available in Pro/Enterprise tiers.
-
-## How it Works
-
-Group mappings are based on the **name** of the group in Okta, which is mapped to a group in NetBox Cloud, and that group could have permissions assigned to it. For example, this group called **CircuitManager** in NetBox Cloud has permissions assigned to it that allows members of the group to manage all of the **Circuit** and  **Provider** object types: 
-
-![NetBox Group Configuration](../images/azure-sso/azure_group_sync_2.png)
-
-![NetBox Group Permissions](../images/azure-sso/azure_group_sync_3.png)
-
-Optionally, members of the Okta groups can also be members of the NetBox built-in groups **Staff** which allows access to the NetBox admin interface, and **Superuser** which has all permissions without explicitly assigning them.
-
-The NetBox Labs support team will map your Okta group names to your NetBox Cloud groups, for example: 
-
-| Okta Group Name | NetBox Cloud Group | Staff | Super User |
-| -------- | ------- |-------- | ------- |
-| NetBox-Circuit-Mgrs | Circuit Manager | Yes | No | 
-
-## How Do I Get it Set Up?
-Simply provide us with your requirements in terms of Okta group names and NetBox groups and we will take care of the rest. 
-
-If you have any questions about Group Mapping for Okta Sign-On (SSO), please raise a support ticket by emailing the [NetBox Labs Support Team](mailto:support@netboxlabs.com).
diff --git a/docs/administration-console/okta-sso-setup.md b/docs/administration-console/okta-sso-setup.md
deleted file mode 100644
index 1a62c1f0..00000000
--- a/docs/administration-console/okta-sso-setup.md
+++ /dev/null
@@ -1,66 +0,0 @@
----
-tags:
-  - cloud
-  - netbox
-  - administration
-  - authentication
-  - configuration
-versions:
-  netbox_cloud: "v1.10"
-status: "current"
----
-
-# Okta SSO Setup
-This guide explains how to configure single sign-on (SSO) support for NetBox Cloud using Okta as an authentication backend.
-
-## Okta Configuration
-Note that Okta offers [free developer accounts](https://developer.okta.com/)
-
-1. Create a test user (optional)
-Create a new user in the Okta admin portal to be used for testing. You can skip this step if you already have a suitable account created.
-
-2. Create an app registration
-Within the Okta administration dashboard, navigate to Applications > Applications, and click the "Create App Integration" button. Select "OIDC" as the sign-in method, and "Web application" for the application type.
-
-    ![Create an app registration](../images/okta-sso/okta_create_app_registration.png)
-
-    On the next page, give the app integration a name (e.g. "NetBox Cloud") and specify the sign-in and sign-out URIs. These URIs should follow the formats below:
-
-    - Sign-in URI:   https://{your-domain}.cloud.netboxapp.com/oauth/complete/okta-openidconnect/
-    - Sign-out URI:  https://{your-domain}.cloud.netboxapp.com/oauth/disconnect/okta-openidconnect/
-    
-    ![Web app integration](../images/okta-sso/okta_web_app_integration.png   )
-
-    Under "Assignments," select the controlled access setting most appropriate for your organization. Click "Save" to complete the creation.
-
-    Once finished, note the following parameters. These will be used to configured NetBox Cloud.
-
-    - Client ID
-    - Client secret
-    - Okta domain
-
-    ![Okta integration parameters](../images/okta-sso/okta_integration_parameters.png)
-
-## NetBox Cloud Configuration
-
-Securely share the following configuration parameters with [NetBox Labs Support](mailto:support@netboxlabs.com), substituting your own values:
-
-REMOTE_AUTH_BACKEND = 'social_core.backends.okta_openidconnect.OktaOpenIdConnect'
-SOCIAL_AUTH_OKTA_OPENIDCONNECT_KEY = '{Client ID}'
-SOCIAL_AUTH_OKTA_OPENIDCONNECT_SECRET = '{Client secret}'
-SOCIAL_AUTH_OKTA_OPENIDCONNECT_API_URL = 'https://{Okta domain}/oauth2/'
-
-The support team will add these parameters to your NetBox Cloud instance and confirm when this is ready for testing.
-
-## Testing
-Log out of NetBox Cloud if already authenticated, and click the "Log In" button at top right. You should see the normal login form as well as an option to authenticate using Okta. Click that link.
-
-![NetBox Okta login form](../images/okta-sso/netbox_okta_login.png)
-
-You should be redirected to Okta's authentication portal. Enter the username/email and password of your test account to continue. You may also be prompted to grant this application access to your account.
-
-![Okta login portal](../images/okta-sso/okta_login_portal.png)
-
-If successful, you will be redirected back to the NetBox Cloud UI, and will be logged in as the Okta user. You can verify this by navigating to your profile (using the button at top right).
-
-This user account has been replicated locally to NetBox Cloud, and can now be assigned groups and permissions within the NetBox Cloud admin UI.
diff --git a/docs/administration-console/prefix-lists.md b/docs/administration-console/prefix-lists.md
deleted file mode 100644
index 67491431..00000000
--- a/docs/administration-console/prefix-lists.md
+++ /dev/null
@@ -1,119 +0,0 @@
----
-tags:
-  - cloud
-  - netbox
-  - administration
-  - networking
-  - configuration
-  - ipam
-  - security
-  - automation
-versions:
-  netbox_cloud: "v1.10"
-status: "current"
----
-
-# Prefix Lists
-
-You can secure access to your NetBox Cloud instance by adding IPv4 and IPv6 addresses and ranges to **Prefix Lists**, which can then be applied to NetBox instances to control which source IPs your instances will accept connections from. 
-
-The following features are available in the NetBox Labs [Admin Console](https://console.netboxlabs.com) when working with prefix lists: 
-
-- Create, Edit and Delete prefix lists
-- Synchronize prefix lists from a NetBox instance using tags
-
-There is also large list support (~15K prefixes) and separate prefixes can be applied to the NetBox Cloud UI, API and GraphQL interfaces. 
-
-!!! note
-    When you have built your prefix lists in the Admin Console, raise a support ticket by emailing the [NetBox Labs Support Team](mailto:support@netboxlabs.com) and we will apply them to your NetBox Cloud instances. 
-
-<!-- COMMENTING VIDEO OUT OF CODE! 
-Watch this quick video or follow the steps outlined below to start managing your prefix lists:
-
-<iframe width="560" height="315" src="https://www.youtube.com/embed/nPwL7ve513g?si=gbsuGCvK3s8VXPP8" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe> -->
-
-## Create a Prefix List (not synchronized with a NetBox)
-
-1. From within the Admin Console, navigate to **Settings** in the left-hand menu
-
-    ![settings](../images/prefix-lists/settings.png)
-
-2. Scroll down and click to expand the **Prefix List** section, and then click on **Create Prefix List** on the right hand side to start the wizard: 
-
-    ![create prefix list](../images/prefix-lists/create-prefix-list.png)
-
-3. Give the prefix list a name and then click **CREATE PREFIX LIST**:
-
-    ![name prefix list](../images/prefix-lists/create-prefix-list-non-sync-1.png)
-
-4. Enter the first prefix and give it a description. If you wish to add additional prefixes then you can also do that here by clicking **+ ADD ADDITIONAL PREFIX**, then when you are happy click **CREATE PREFIXES**.
-
-    *Note* - if you wish to add the IP address that you are currently using then click **Use Current IP Address** and this will add it to the prefix list: 
-
-    ![enter prefixes](../images/prefix-lists/create-prefix-list-non-sync-2.png)
- 
- 5. You can then view the prefix list from within **Settings > Prefix List**: 
-
-    ![view prefix list](../images/prefix-lists/create-prefix-list-non-sync-3.png)
-
-## Create a Prefix List (synchronized with a NetBox)
-
-1. From within the Admin Console, navigate to **Settings** in the left-hand menu
-
-    ![settings](../images/prefix-lists/settings.png)
-
-2. Scroll down and click to expand the **Prefix List** section, and then click on **Create Prefix List** on the right hand side to start the wizard: 
-
-    ![create prefix list](../images/prefix-lists/create-prefix-list.png)
-
-3. Give the prefix list a name and then select the **Yes** radio button to sync the prefix list from a NetBox. Then select the NetBox instance you wish to sync from, specify the NetBox Tag that you wish to use, and then click **CREATE PREFIX LIST**:    
-
-    ![create prefix list](../images/prefix-lists/create-prefix-list-sync-1.png)
-
-4. Switch to your NetBox instance, and go to **Customization > Tags** and create the required tag(s) to be applied to any prefixes that are to be synchronized to the Prefix List: 
-
-    ![create tags](../images/prefix-lists/create-prefix-list-sync-2.png)
- 
-5. Under **IPAM > Prefixes** add the prefixes, give them a description and tag them with the appropriate tag: 
-
-    ![view prefix list](../images/prefix-lists/create-prefix-list-sync-3.png)
-
-6. You can then view the prefixes in NetBox under **IPAM > Prefixes** (*Tip* - filter on the tag): 
-
-    ![view prefixes](../images/prefix-lists/create-prefix-list-sync-4.png)
-
-7. Switch back to the Admin Console to view the prefix list from within **Settings > Prefix List**. *Note* - it can take a few minutes for the prefix list to be fully synchronized from NetBox. 
-
-    ![view prefix list](../images/prefix-lists/create-prefix-list-sync-5.png)
-
-## Edit a Prefix List
-
-*Note* - this only works for prefix lists that are not synchronized with a NetBox. To edit NetBox synchronized prefix lists you should make the edits within NetBox. 
-
-1. From within the Admin Console, navigate to **Settings** in the left-hand menu, and then scroll down and click to expand the **Prefix List** section. Then click on the name of the prefix list you wish to edit: 
-
-    ![edit prefix list](../images/prefix-lists/edit-prefix-list-1.png)
-
-2. To add more prefixes to the list, click on **Create Prefix** and then follow the wizard again to add more prefixes. 
-
-3. To edit a prefix, click **EDIT** and then make your required changes and then click **EDIT PREFIX** to save your changes: 
-
-    ![edit prefix](../images/prefix-lists/edit-prefix-list-2.png)
-
-4. To delete a prefix, click **DELETE** and then if you are sure you wish to delete the prefix, click **DELETE PREFIX** when prompted: 
-
-    ![delete prefix](../images/prefix-lists/edit-prefix-list-3.png)
-
-## Delete a Prefix List 
-
-*Note* - in order for a prefix list to be deleted it must first be detached from any NetBox instances that it is securing. You will need to contact support and request this before you can delete it. 
-
-1. From within the Admin Console, navigate to **Settings** in the left-hand menu, and then scroll down and click to expand the **Prefix List** section. Then click on the name of the prefix list you wish to delete, and click **DELETE PREFIX LIST**:
-
-    ![delete prefix list](../images/prefix-lists/delete-prefix-list-1.png)
-
-2. If you are sure you wish to delete the prefix list then click **DELETE PREFIX LIST** when you are prompted to confirm the deletion: 
-
-    ![delete prefix list](../images/prefix-lists/delete-prefix-list-2.png)
-
-If you encounter any issues while working with the IP Allow List raise a support ticket by emailing the [NetBox Labs Support Team](mailto:support@netboxlabs.com)
\ No newline at end of file
diff --git a/docs/administration-console/public-ip-addressing.md b/docs/administration-console/public-ip-addressing.md
deleted file mode 100644
index 60a565de..00000000
--- a/docs/administration-console/public-ip-addressing.md
+++ /dev/null
@@ -1,61 +0,0 @@
----
-tags:
-  - cloud
-  - netbox
-  - administration
-  - networking
-  - configuration
-versions:
-  netbox_cloud: "v1.10"
-status: "current"
----
-
-# Public IP Addressing
-
-## Traffic Originating From NetBox Cloud
-
-The Public IP addresses that outbound traffic from your NetBox Cloud instance (eg. webhooks) will be seen to be originating from are listed below. This will vary depending on the region that your instance is located in.   
-
-You can whitelist these IP ranges so that inbound access from your NetBox Cloud instance(s) is restricted to just these addresses: 
-
-### US-EAST-1
-
-**IPv4**
-```
-3.225.69.195
-3.233.255.24
-34.231.51.53
-```
-
-**IPv6**
-```
-2600:1f18:462e:4c00::/56
-```
-### EU-WEST-1
-
-**IPv4**
-```
-108.128.2.233
-3.252.161.89
-46.51.185.39
-```
-
-**IPv6**
-
-```
-2a05:d018:1128:7a00::/56
-```
-
-### EU-WEST-2
-
-**IPv4**
-```
-13.42.148.73
-18.132.136.73
-18.132.221.240
-```
-
-**IPv6**
-```
-2a05:d01c:11e:a800::/56
-```
diff --git a/docs/administration-console/saml-group-map.md b/docs/administration-console/saml-group-map.md
deleted file mode 100644
index 13aca295..00000000
--- a/docs/administration-console/saml-group-map.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-tags:
-  - cloud
-  - netbox
-  - administration
-  - authentication
-  - configuration
-versions:
-  netbox_cloud: "v1.10"
-status: "current"
----
-
-# Configuring SAML Group Mapping in NetBox Cloud  
-
-NetBox Cloud supports SAML-based authentication, including group mappings to enforce role-based access control. For group mapping, you will need to provide your Identity Provider (IdP) group names so we can associate them with the desired NetBox groups.
-
-## Group Attribute Mapping  
-
-By default, NetBox Cloud expects the SAML group attribute statement to be named `groups`, which contains a list of group names the user belongs to. If your IdP sends group information under a different attribute name, such as `MemberOf`, you must update its configuration to use `groups` to ensure proper mapping.
-
-## Providing Your Group Mappings  
-
-To set up group mapping, follow these steps:  
-
-1. **Create Groups in NetBox** – Set up user groups in NetBox and assign appropriate permissions.  
-2. **Define Your Mappings** – Determine which IdP groups should be mapped to which NetBox groups. Ensure you are using the exact group names as they appear in your IdP.  
-3. **Share Your Mappings** – Provide your IdP group names along with the corresponding NetBox groups to the NetBox Cloud team so we can configure the mappings on our end.  
-
-
-Below is an example that illustrates how IdP groups are mapped to NetBox user groups:  
-
-```
-    "IdP-group-name": "netbox-user-group",
-    "another-IdP-group-name": "another-netbox-user-group"
-```
-
-Once configured, users will be assigned NetBox roles based on their IdP group membership.
\ No newline at end of file
diff --git a/docs/administration-console/saml-sso-setup.md b/docs/administration-console/saml-sso-setup.md
deleted file mode 100644
index 951a76b9..00000000
--- a/docs/administration-console/saml-sso-setup.md
+++ /dev/null
@@ -1,47 +0,0 @@
----
-tags:
-  - cloud
-  - netbox
-  - authentication
-  - configuration
-versions:
-  netbox_cloud: "v1.10"
-status: "current"
----
-
-# NetBox Cloud SAML Configuration Guide
-
-## Overview
-This document details the procedure for configuring SAML-based Single Sign-On (SSO) for your NetBox Cloud environment.
-
-## Required Information
-To facilitate SAML integration, we require the following details from your Identity Provider (IdP):
-
-- <u>**Service Provider Entity ID:**</u> The unique identifier of your organization in the SAML ecosystem.
-- <u>**Identity Provider Settings:**</u>
-
-    **entity_id**: This is your IdP's Entity ID obtained from the SAML metadata. 
-
-    **url**: Your IdP's SSO login URL. 
-
-    **x509cert**: The Base64-encoded X.509 certificate used to sign SAML assertions. 
-
-!!! Note
-    **Preferred Submission Method**: For efficiency and accuracy, please provide your IdP Metadata File. This standardized format ensures all necessary information is included.
-
-## Configuration Process in NetBox Cloud
-**Once we receive your SAML configuration details, we will:**
-
-1. Generate a public/private certificate pair.
-
-2. Provide you with the public certificate, which you will need to configure your IdP.
-
-**Additionally you will need to configure the following parameters within your IdP settings:**
-
-- Service Provider (SP) Entity ID: `https://<org-name>.cloud.netboxapp.com/`
-
-- Assertion Consumer Service (ACS) URL: `https://<org-name>.cloud.netboxapp.com/`
-
-## Testing
-
-Once your NetBox Cloud and Identity Provider (IdP) configurations are finalized, you can proceed with testing to confirm that you are able to log in via your SAML provider.
diff --git a/docs/administration-console/upgrading-nbc.md b/docs/administration-console/upgrading-nbc.md
deleted file mode 100644
index 3b45b417..00000000
--- a/docs/administration-console/upgrading-nbc.md
+++ /dev/null
@@ -1,56 +0,0 @@
----
-tags:
-  - cloud
-  - netbox
-  - administration
-  - upgrade
-  - maintenance
-versions:
-  netbox_cloud: "v1.10"
-status: "current"
----
-
-# Upgrading NetBox Cloud
-
-To safely and easily upgrade your NetBox Cloud instance without worrying about any plugin compatibility issues, follow the steps outlined below:
-
-[//]: # (COMMENTING VIDEO OUT OF CODE!)
-[//]: # (<iframe width="560" height="315" src="https://www.youtube.com/embed/eRWaIXODHR4?si=vf-qdZ53tcICodW_" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>)
-
-1. In the NetBox Labs [Console](https://console.netboxlabs.com/dashboard/), click on the three dots in the top right corner of the instance you wish to upgrade and click **Upgrade**. Note the current NetBox version in this example is 4.1.7.
-
-    ![Manage Instance](../images/upgrades/upgrades_manage_1.png)
-
-2. The **Safe Upgrade tool** will present you with the **potential** and **recommended** versions you can upgrade to.
-
-    You will see the version number, the status, whether installed plugins are compatible with the target NetBox version, and a link to the release notes for that version.
-
-    ![Upgrade Options](../images/upgrades/upgrades_upgrade_options_3.png)
-
-    Note that we could upgrade to any of the other **potential** options, but the Safe Upgrade tool is recommending an upgrade to version 4.1.11. If you select this option, all plugins will be automatically upgraded to compatible versions as part of the upgrade process.
-
-    Note too that if a plugin is **not compatible** with a certain NetBox version, you will see a warning like this:
-
-    ![Incompatible Plugin Warning](../images/upgrades/upgrades_incompatible_plugin.png)
-
-    In this case, you would not be able to upgrade to that version, and the tool will not allow you to select it. This typically means the plugin developer has not yet released a version compatible with that NetBox version.
-
-3. Select the version you wish to upgrade to. In this example, we will select the recommended version 3.6.
-
-4. Click on **UPGRADE VERSION**.
-
-    ![Click Upgrade Button](../images/upgrades/upgrades_upgrade_4.png)
-
-5. Click on **Continue** if you are sure you want to go ahead with the upgrade.
-
-    ![Upgrade Confirmation Warning](../images/upgrades/upgrades_warning_5.png)
-
-6. You will then see a dialog box confirming the upgrade is in progress.
-
-    ![Upgrade in Progress](../images/upgrades/upgrades_progress_6.png)
-
-7. A few seconds later, your NetBox Cloud upgrade will be complete. You will see the new version number.
-
-    ![Upgrade Complete - New Version](../images/upgrades/upgrades_new_version_7.png)
-
-If you encounter any issues during the upgrade or have any questions, please raise a support ticket by emailing the [NetBox Labs Support Team](mailto:support@netboxlabs.com).
\ No newline at end of file
diff --git a/docs/administration-console/working_with_database_backups.md b/docs/administration-console/working_with_database_backups.md
deleted file mode 100644
index a3b7924f..00000000
--- a/docs/administration-console/working_with_database_backups.md
+++ /dev/null
@@ -1,86 +0,0 @@
----
-tags:
-  - cloud
-  - netbox
-  - administration
-  - backup
-  - database
-versions:
-  netbox_cloud: "v1.10"
-status: "current"
----
-
-# Working with NetBox Cloud Database Backups
-
-Within the NetBox Labs [Console](https://console.netboxlabs.com/dashboard/) you can access the backups of your NetBox Cloud database, and are able to perform the following actions:  
-
-- View a list of all available database backups
-- Take an 'On Demand' backup at any time
-- Download a local copy of a specific backup file  
-- Restore your NetBox Cloud instance from a database backup
-
-<!-- COMMENTING VIDEO OUT OF CODE!
-Watch this quick video or follow the steps outlined below to get started: 
-
-<iframe width="560" height="315" src="https://www.youtube.com/embed/1YnQhsC6KFQ?si=q4JyPGQIbN-Q_0Yv" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe> -->
-
-## View a List of Available Database Backups
-
-1. Login to the NetBox Labs [Console](https://console.netboxlabs.com/dashboard/) and then click on the three dots in the top-right corner of the instance you wish to manage and click **Backup & Restore**:
-
-    ![select netbox instance](../images/backups/manage_instance.png)
-
-2. Within **Backup and Restore** you can view the list of available backups:
-
-    ![view list of backups](../images/backups/view_list_backups.png)
-
-## Take an 'On Demand' Database Backup
-
-1. From within the **Backup and Restore** panel click on **Back Up Now**, on the right-hand side: 
-
-    ![back up now](../images/backups/backup_now.png)
-
-2. Click **CONTINUE** to confirm that you want to backup of the current version of NetBox Cloud
-
-    ![confirm backup](../images/backups/confirm_backup.png)
-
-3. After a short while you will see the **On Demand** backup you just created appear in the list of available backups: 
-
-    ![on demand backup taken](../images/backups/list_backups.png)
-
-## Download a Local Copy of a Backup File
-
-1. Locate the backup file you wish to retrieve, and click on the **Download** icon:
-
-    ![download backup](../images/backups/download_backup.png)
-
-2. The download will then be prepared: 
-
-    ![prepare download](../images/backups/prepare_download.png)
-
-3. Once the backup file has been prepared it will automatically be downloaded into the **Downloads** directory on your local computer's file system. Note the file is a **gzip compressed archive** of the **SQL** database file so it will end in `.sql.gz`.
-
-## Restore From a Database Backup File
-
-1. Identify the database backup you wish to restore from, and click **Restore**:
-
-    ![click restore](../images/backups/restore_select.png)
-
-2. Click **CONTINUE** if you are sure you wish to restore the selected backup:
-
-    ![confirm restore](../images/backups/restore_confirm.png)
-
-3. The restore process will take place in the background, and depending on the size of the database should take no longer than a few minutes to complete. Once the restore has completed, you can click on **Restore History** to view the list of database restores, and you will see your completed restore listed:
-
-    ![completed restore](../images/backups/restore_history_1.png)
-
-    ![completed restore](../images/backups/restore_history_2.png)
-
-4. Your database restore is now complete. 
-
-!!! info
-    Once the database restore is complete your NetBox Cloud instance will restart, and you may briefly see a `503 - Service Unavailable` message when you browse to the Web interface. This is normal and will clear after a short while, after which you can log in again. 
-    
-    Also, please be aware that the NetBox changelog will be empty when you first log in after a database restore.
-
-If you encounter any issues while working with database backups raise a support ticket by emailing the [NetBox Labs Support Team](mailto:support@netboxlabs.com)
\ No newline at end of file
diff --git a/docs/cloud-connectivity/aws-direct-connect-multi-region.md b/docs/cloud-connectivity/aws-direct-connect-multi-region.md
deleted file mode 100644
index eaed8ee9..00000000
--- a/docs/cloud-connectivity/aws-direct-connect-multi-region.md
+++ /dev/null
@@ -1,21 +0,0 @@
----
-tags:
-  - cloud
-  - cloud-connectivity
-  - networking
-  - aws
-  - direct-connect
-  - multi-region
-  - high-availability
-versions:
-  netbox_cloud: "v1.10"
-status: "current"
----
-
-# AWS Direct Connect (Multi-Region)
-
-Delivery via [AWS Direct Connect](https://aws.amazon.com/directconnect/) in two regions, with replicated NetBoxes, Single (or Dual) Direct Connect in each region. Customer IP space (2 x /25's) is assigned for the VPCs. This is to host load balancers and proxies within the dedicated customer Account/VPC. Internally we will allocate a /27 per availability zone for each of the 3 availability zones.
-
-The connections do not have to be dedicated, a VLAN can be added to an existing layer 2 fabric provider, such as Equinix Fabric. In terms of bandwidth requirements, 50Mbps is fine.
-
-![AWS Direct Connect Multi-Region Failover](../images/cloud-connectivity/aws-direct-connect-multi-region-failover.png)
\ No newline at end of file
diff --git a/docs/cloud-connectivity/aws-direct-connect.md b/docs/cloud-connectivity/aws-direct-connect.md
deleted file mode 100644
index 8f7ae3be..00000000
--- a/docs/cloud-connectivity/aws-direct-connect.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-tags:
-  - cloud
-  - networking
-  - configuration
-  - integration
-versions:
-  netbox_cloud: "v1.10"
-status: "current"
----
-
-# AWS Direct Connect (Single Region)
-
-[AWS Direct Connect](https://aws.amazon.com/directconnect/) is available via hosted connections from BT, Equinix Fabric, MegaPort, Optus, PCCW, Zayo etc. VLAN hand-off is with BGP and Single or Dual Direct Connect services are available. Customer IP space (/24 or /25) is assigned for the VPC, as this is required to host load balancers and proxies within the dedicated customer Account/VPC. Internally we will allocate a /27 per availability zone for each of the 3 availability zones.
-
-The connection does not have to be dedicated, a VLAN can be added to an existing layer 2 fabric provider, such as Equinix Fabric. In terms of bandwidth requirements, 50Mbps is fine.
-
-![AWS Direct Connect](../images/cloud-connectivity/aws-direct-connect.png)
\ No newline at end of file
diff --git a/docs/cloud-connectivity/aws-private-link.md b/docs/cloud-connectivity/aws-private-link.md
deleted file mode 100644
index ce128f53..00000000
--- a/docs/cloud-connectivity/aws-private-link.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-tags:
-  - cloud
-  - cloud-connectivity
-  - networking
-  - aws
-  - private-link
-versions:
-  netbox_cloud: "v1.10"
-status: "current"
----
-
-# AWS Private Link (Single Region)
-
-Delivery via [Private Link](https://aws.amazon.com/privatelink/) between a customer's existing AWS account and the NetBox Labs AWS account, with VPC endpoints using private IPs. This option has fast turn-up times and standard Internet delivery can optionally be disabled.
-
-![AWS Private Link](../images/cloud-connectivity/aws-private-link.png)
\ No newline at end of file
diff --git a/docs/cloud-connectivity/cloud-connectivity-faq.md b/docs/cloud-connectivity/cloud-connectivity-faq.md
deleted file mode 100644
index 07a6deb8..00000000
--- a/docs/cloud-connectivity/cloud-connectivity-faq.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-tags:
-  - cloud
-  - cloud-connectivity
-  - networking
-  - faq
-  - troubleshooting
-versions:
-  netbox_cloud: "v1.10"
-status: "current"
----
-
-# Cloud Connectivity Frequently Asked Questions
-
-## IPSEC VPN Tunnels
-
-**Q. Why 2 tunnels?** </br>
-**A.** The AWS VPN Gateway product provides 2 tunnels by default for resilience. Each terminates in a different availability zone.
-
-## IPSEC VPN Tunnels + Direct Connect
-**Q. Why /24 or /25?** </br>
-**A.**  This is to host load balancers and proxies within the dedicated customer Account/VPC. Internally we will allocate a /27 per availability zone for each of the 3 availability zones.
-
-## Direct Connect
-**Q. Does the connection have to be dedicated?** </br>
-**A.**  No, a VLAN can be added to an existing layer 2 fabric provider, such as Equinix Fabric.
-
-**Q. How much bandwidth for hosted connections?** </br>
-**A.**  50Mbps is fine.
diff --git a/docs/cloud-connectivity/do-i-need-cloud-connectivity.md b/docs/cloud-connectivity/do-i-need-cloud-connectivity.md
deleted file mode 100644
index a7c75a0d..00000000
--- a/docs/cloud-connectivity/do-i-need-cloud-connectivity.md
+++ /dev/null
@@ -1,60 +0,0 @@
----
-tags:
-  - cloud
-  - cloud-connectivity
-  - networking
-  - decision-guide
-versions:
-  netbox_cloud: "v1.10"
-status: "current"
----
-
-# Do I Need Cloud Connectivity Options?
-
-[Internet Delivery (Single Region)](../cloud-connectivity/internet-delivery.md) is the standard product offering for NetBox Cloud. It comes with extensive security features (see below) and is suitable for the majority of use cases and environments.
-
-If you have special connectivity needs, there are several [options](../cloud-connectivity/which-connectivity-option.md) available. However, in many cases where cloud connectivity options seem necessary, NetBox Cloud offers features that can address your needs without additional setup cost. This guide explores some of those features.
-
-## NetBox Cloud Security Features
-Security and convenience are always in focus in the NetBox Cloud Platform and we understand that with any application, getting the balance right between security and convenience is crucial. At NetBox Labs, we believe that you shouldn't have to compromise in either area. Just a few of the Security features the NetBox Cloud platform offers are:
-
-- Securing Access with [Prefix Lists](https://netboxlabs.com/docs/administration-console/prefix-lists/)
-- mTLS and Dedicated IP Addresses
-- [Database Backup and Restore](https://netboxlabs.com/docs/administration-console/working_with_database_backups/)
-- [Safe Upgrade Tool](https://netboxlabs.com/docs/administration-console/upgrading-nbc/)
-- [Two-Factor Authentication](https://netboxlabs.com/docs/administration-console/set_up_2fa/) for the NetBox Labs Admin Console
-- [SSO Options](https://netboxlabs.com/docs/administration-console/azure-ad-sso-setup/) for NetBox Cloud
-
-Read more about all of these features in this [blog](https://netboxlabs.com/blog/security-and-convenience-are-always-in-focus-in-the-netbox-cloud-platform/?preview_id=19124&preview_nonce=8a862c2421&preview=true) or watch an on-demand [webinar](https://netboxlabs.com/events/webinar-new-security-and-efficiency-enhancements-in-netbox-cloud/) to learn how these NetBox Cloud features are designed to make the lives of the network team easier, whilst at the same time enhancing the security of NetBox Cloud.
-
-## CRUD (Create/Update/Delete) Access to the NetBox Data Model via REST and GraphQL API
-Out of the box NetBox Cloud allows you to programmatically interact with the NetBox Database to perform CRUD operations. This can be via the REST API or GraphQL interface.
-
-### REST API
-REST stands for [Representational State Transfer](https://en.wikipedia.org/wiki/REST). It's a particular type of API which employs HTTP requests and [JavaScript Object Notation (JSON)](https://www.json.org/json-en.html) to facilitate create, retrieve, update, and delete (CRUD) operations on objects within an application.
-
-!!! info
-    To read more about how to get started with the REST API, check out the [NetBox docs](https://netbox.readthedocs.io/en/stable/integrations/rest-api/) or this [video](https://youtu.be/Gsarb0elmoA?si=KUli-RLlJeYS5gp4) from the NetBox Zero to Hero training course.
-
-### GraphQL API
-NetBox provides a read-only [GraphQL](https://graphql.org/) API to complement its REST API. This API is powered by [Strawberry Django](https://strawberry-graphql.github.io/strawberry-django/). GraphQL enables the client to specify an arbitrary nested list of fields to include in the response. All queries are made to the root /graphql API endpoint.
-
-!!! info
-    To read more about how to get started with the GraphQL API, check out the [NetBox docs](https://netbox.readthedocs.io/en/stable/integrations/graphql-api/).
-
-## Streaming Change Events with Webhooks and Event Streams
-Events in NetBox can trigger calls to other systems with Webhooks, or other systems can subscribe to Event Streams, and in either case this can trigger other systems to take action based on the event.
-
-### NetBox Webhooks
-NetBox can be configured via [Event Rules](https://netbox.readthedocs.io/en/stable/features/event-rules/) to transmit outgoing webhooks to remote systems in response to internal object changes. The receiver can act on the data in these webhook messages to perform related tasks.
-
-For example, suppose you want to automatically configure a monitoring system to start monitoring a device when its operational status is changed to active, and remove it from monitoring for any other status. You can create a webhook in NetBox for the device model and craft its content and destination URL to effect the desired change on the receiving system. Webhooks will be sent automatically by NetBox whenever the configured constraints are met.
-
-!!! info
-    To read more about how to get started with the Webhooks, check out the [NetBox docs](hhttps://netbox.readthedocs.io/en/stable/integrations/webhooks/).
-
-### NetBox Event Streams
-[NetBox Event Streams](https://netboxlabs.com/blog/netbox-labs-introduces-netbox-event-streams/) unlock event-driven architectures by enabling teams to easily subscribe to network state and management events from the NetBox Cloud Platform, feeding events to other systems or triggering automations. This capability spans various types of events, from operational updates like the addition of new devices, to security-oriented alerts such as unauthorized access attempts.
-
-!!! info
-    To learn more about NetBox Event Streams you can sign up for an [on-demand webinar](https://netboxlabs.com/events/event-driven-architectures-for-networking-and-security-webinar/) or read our [blog](https://netboxlabs.com/blog/revolutionizing-netsecops-netbox-event-streams-and-siem-integration/) about how NetBox Event Streams integrated with SIEM tools like Splunk Enterprise and ElasticSearch, is setting a new standard for how networks are managed and secured.
diff --git a/docs/cloud-connectivity/internet-delivery.md b/docs/cloud-connectivity/internet-delivery.md
deleted file mode 100644
index a31d7585..00000000
--- a/docs/cloud-connectivity/internet-delivery.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-tags:
-  - cloud
-  - cloud-connectivity
-  - networking
-  - internet-delivery
-versions:
-  netbox_cloud: "v1.10"
-status: "current"
----
-
-# Internet Delivery (Single Region)
-
-Internet Delivery (Single Region) is the standard product offering for NetBox Cloud. It comes with extensive security features (see below) and is suitable for the majority of use cases and environments:
-
-![Internet Delivery](../images/cloud-connectivity/internet-delivery.png)
-
-## NetBox Cloud Security Features
-Below are just a few of the Security features available on the NetBox Cloud platform. All of these can be enabled over our standard Internet Delivery option:
-
-- Securing Access with [Prefix Lists](https://netboxlabs.com/docs/administration-console/prefix-lists/)
-- mTLS and Dedicated IP Addresses
-- [Database Backup and Restore](https://netboxlabs.com/docs/administration-console/working_with_database_backups/)
-- [Safe Upgrade Tool](https://netboxlabs.com/docs/administration-console/upgrading-nbc/)
-- [Two-Factor Authentication](https://netboxlabs.com/docs/administration-console/set_up_2fa/) for the NetBox Labs Admin Console
-- [SSO Options](https://netboxlabs.com/docs/administration-console/azure-ad-sso-setup/) for NetBox Cloud
-
-!!! info
-    Read more about all of these features in this [blog](https://netboxlabs.com/blog/security-and-convenience-are-always-in-focus-in-the-netbox-cloud-platform/?preview_id=19124&preview_nonce=8a862c2421&preview=true) or watch an on-demand [webinar](https://netboxlabs.com/events/webinar-new-security-and-efficiency-enhancements-in-netbox-cloud/) to learn how these NetBox Cloud features are designed to make the lives of the network team easier, whilst at the same time enhancing the security of NetBox Cloud.
\ No newline at end of file
diff --git a/docs/cloud-connectivity/ipsec-vpn-tunnels.md b/docs/cloud-connectivity/ipsec-vpn-tunnels.md
deleted file mode 100644
index f6dec32c..00000000
--- a/docs/cloud-connectivity/ipsec-vpn-tunnels.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-tags:
-  - cloud
-  - cloud-connectivity
-  - networking
-  - vpn
-  - ipsec
-  - security
-versions:
-  netbox_cloud: "v1.10"
-status: "current"
----
-
-# IPSEC VPN Tunnels (Single Region)
-
-In this solution NetBox Cloud is securely delivered over an IPSEC VPN. You have single or dual tunnel options, and use a static route or the preferred option of BGP routing. Customer IP space (/24 or /25) is assigned for the VPC as this is required to host load balancers and proxies within the dedicated customer Account/VPC.
-
-Internally we will allocate a /27 per availability zone for each of the 3 availability zones. The AWS VPN Gateway product provides 2 tunnels by default for resilience, and each terminates in a different availability zone.
-
-![IPSEC VPN](../images/cloud-connectivity/ipsec-vpn.png)
-
-## Redundancy options
-With the IPSEC VPN solution there are options for Single, Active/Passive and Active/Active Firewalls:
-
-![IPSEC redundancy options](../images/cloud-connectivity/ipsec-redundancy-options.png)
diff --git a/docs/cloud-connectivity/which-connectivity-option.md b/docs/cloud-connectivity/which-connectivity-option.md
deleted file mode 100644
index 17632057..00000000
--- a/docs/cloud-connectivity/which-connectivity-option.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-tags:
-  - cloud
-  - cloud-connectivity
-  - networking
-  - decision-guide
-  - aws
-versions:
-  netbox_cloud: "v1.10"
-status: "current"
----
-
-# Which Cloud Connectivity Option is Right for Me?
-
-In many cases where cloud connectivity options seem necessary, NetBox Cloud offers [features](../cloud-connectivity/do-i-need-cloud-connectivity.md) that can address your needs without additional setup. In the majority of cases [Internet Delivery (Single Region)](../cloud-connectivity/internet-delivery.md) is the most appropriate connectivity option, but there are some general recommendations depending on your use case:
-
-
-## Recommendations By Use Case
-| Use Case                            | Recommendation                          | Reason                                                                                 |
-|-------------------------------------|-----------------------------------------|----------------------------------------------------------------------------------------|
-| **General Use**                     | [Internet Delivery (Single Region)](../cloud-connectivity/internet-delivery.md)       | Standard product, easy setup, and sufficient security for most use cases.              |
-| **AWS-Centric Environments**        | [AWS Private Link (Single Region)](../cloud-connectivity/aws-private-link.md)        | Fast setup, private IPs, and good integration with AWS infrastructure.                 |
-| **Secure, Site-to-Site Connections**| [IPSEC VPN Tunnels (Single Region)](../cloud-connectivity/ipsec-vpn-tunnels.md)       | High flexibility and security with VPN tunnels and routing options.                    |
-| **High-Performance Needs (Single Region)** | [AWS Direct Connect (Single Region)](../cloud-connectivity/aws-direct-connect.md)   | Low latency, high performance, suitable for demanding applications.                    |
-| **High-Performance, Multi-Region Needs** | [AWS Direct Connect (Multi-Region)](../cloud-connectivity/aws-direct-connect-multi-region.md)    | Highest performance, redundancy, and scalability across multiple regions.              |
-
-
-## Detailed Breakdown
-This matrix should help you identify the most suitable NetBox Cloud connectivity option based on your specific requirements and priorities:
-
-| Criteria                          | [Internet Delivery (Single Region)](../cloud-connectivity/internet-delivery.md)      | [AWS Private Link (Single Region)](../cloud-connectivity/aws-private-link.md)          | [IPSEC VPN Tunnels (Single Region)](../cloud-connectivity/ipsec-vpn-tunnels.md)       | [AWS Direct Connect (Single Region)](../cloud-connectivity/aws-direct-connect.md)      | [AWS Direct Connect (Multi-Region)](../cloud-connectivity/aws-direct-connect-multi-region.md)      |
-|-----------------------------------|----------------------------------------|-------------------------------------------|-----------------------------------------|----------------------------------------|----------------------------------------|
-| **Ease of Setup**                 | Standard product, easy setup           | Fast turn-up times                        | Requires VPN configuration              | Requires Direct Connect setup          | Requires Direct Connect setup          |
-| **Redundancy**                    | Single region. Multiple AZs            | Single region. Multiple AZs               | Single region. Multiple AZs. Single or dual tunnels | Single region. Multiple AZs. Single or dual Direct Connect options  | Multi Region. Multiple AZs. Replicated NetBoxes |
-| **Cost**                          | Included                               | Low, due to Private Link                  | Medium, dependent on VPN set up         | Medium, due to Direct Connect          | Highest, due to multi-region setup |
-| **Performance**                   | Standard internet performance          | Low latency due to Private Link           | Variable, dependent on VPN quality      | High performance, low latency          | Highest performance, low latency       |
-| **Management Complexity**         | Low                                    | Medium                                    | High                                    | Medium                                 | High                                   |
-| **Recommended For**               | General use                            | AWS-centric environments                  | Secure, site-to-site connections        | High-performance needs, single region  | High-performance, multi-region needs   |
diff --git a/docs/images/azure-sso/azure_ad_add_app_registration.png b/docs/images/azure-sso/azure_ad_add_app_registration.png
deleted file mode 100644
index 4cc4fc81..00000000
Binary files a/docs/images/azure-sso/azure_ad_add_app_registration.png and /dev/null differ
diff --git a/docs/images/azure-sso/azure_ad_add_client_secret.png b/docs/images/azure-sso/azure_ad_add_client_secret.png
deleted file mode 100644
index 93f4eb77..00000000
Binary files a/docs/images/azure-sso/azure_ad_add_client_secret.png and /dev/null differ
diff --git a/docs/images/azure-sso/azure_ad_app_registration.png b/docs/images/azure-sso/azure_ad_app_registration.png
deleted file mode 100644
index eb1634e9..00000000
Binary files a/docs/images/azure-sso/azure_ad_app_registration.png and /dev/null differ
diff --git a/docs/images/azure-sso/azure_ad_app_registration_created.png b/docs/images/azure-sso/azure_ad_app_registration_created.png
deleted file mode 100644
index 7e14dc73..00000000
Binary files a/docs/images/azure-sso/azure_ad_app_registration_created.png and /dev/null differ
diff --git a/docs/images/azure-sso/azure_ad_client_secret.png b/docs/images/azure-sso/azure_ad_client_secret.png
deleted file mode 100644
index bebae388..00000000
Binary files a/docs/images/azure-sso/azure_ad_client_secret.png and /dev/null differ
diff --git a/docs/images/azure-sso/azure_ad_client_secret_created.png b/docs/images/azure-sso/azure_ad_client_secret_created.png
deleted file mode 100644
index c142f2a9..00000000
Binary files a/docs/images/azure-sso/azure_ad_client_secret_created.png and /dev/null differ
diff --git a/docs/images/azure-sso/azure_ad_login_portal.png b/docs/images/azure-sso/azure_ad_login_portal.png
deleted file mode 100644
index 891f6435..00000000
Binary files a/docs/images/azure-sso/azure_ad_login_portal.png and /dev/null differ
diff --git a/docs/images/azure-sso/azure_group_sync_1.png b/docs/images/azure-sso/azure_group_sync_1.png
deleted file mode 100644
index 85362bdc..00000000
Binary files a/docs/images/azure-sso/azure_group_sync_1.png and /dev/null differ
diff --git a/docs/images/azure-sso/azure_group_sync_2.png b/docs/images/azure-sso/azure_group_sync_2.png
deleted file mode 100644
index 5f7f603e..00000000
Binary files a/docs/images/azure-sso/azure_group_sync_2.png and /dev/null differ
diff --git a/docs/images/azure-sso/azure_group_sync_3.png b/docs/images/azure-sso/azure_group_sync_3.png
deleted file mode 100644
index 652088ca..00000000
Binary files a/docs/images/azure-sso/azure_group_sync_3.png and /dev/null differ
diff --git a/docs/images/azure-sso/netbox_azure_ad_login.png b/docs/images/azure-sso/netbox_azure_ad_login.png
deleted file mode 100644
index 11c1e78c..00000000
Binary files a/docs/images/azure-sso/netbox_azure_ad_login.png and /dev/null differ
diff --git a/docs/images/backups/backup_now.png b/docs/images/backups/backup_now.png
deleted file mode 100644
index b691f377..00000000
Binary files a/docs/images/backups/backup_now.png and /dev/null differ
diff --git a/docs/images/backups/confirm_backup.png b/docs/images/backups/confirm_backup.png
deleted file mode 100644
index 7c1ab0f0..00000000
Binary files a/docs/images/backups/confirm_backup.png and /dev/null differ
diff --git a/docs/images/backups/download_backup.png b/docs/images/backups/download_backup.png
deleted file mode 100644
index f4ea2d66..00000000
Binary files a/docs/images/backups/download_backup.png and /dev/null differ
diff --git a/docs/images/backups/list_backups.png b/docs/images/backups/list_backups.png
deleted file mode 100644
index aec89233..00000000
Binary files a/docs/images/backups/list_backups.png and /dev/null differ
diff --git a/docs/images/backups/manage_instance.png b/docs/images/backups/manage_instance.png
deleted file mode 100644
index 9cf6883f..00000000
Binary files a/docs/images/backups/manage_instance.png and /dev/null differ
diff --git a/docs/images/backups/prepare_download.png b/docs/images/backups/prepare_download.png
deleted file mode 100644
index dc17b7af..00000000
Binary files a/docs/images/backups/prepare_download.png and /dev/null differ
diff --git a/docs/images/backups/restore_confirm.png b/docs/images/backups/restore_confirm.png
deleted file mode 100644
index a26fd7c1..00000000
Binary files a/docs/images/backups/restore_confirm.png and /dev/null differ
diff --git a/docs/images/backups/restore_history_1.png b/docs/images/backups/restore_history_1.png
deleted file mode 100644
index e1556bed..00000000
Binary files a/docs/images/backups/restore_history_1.png and /dev/null differ
diff --git a/docs/images/backups/restore_history_2.png b/docs/images/backups/restore_history_2.png
deleted file mode 100644
index 0d394dfd..00000000
Binary files a/docs/images/backups/restore_history_2.png and /dev/null differ
diff --git a/docs/images/backups/restore_select.png b/docs/images/backups/restore_select.png
deleted file mode 100644
index 0a4e0d2d..00000000
Binary files a/docs/images/backups/restore_select.png and /dev/null differ
diff --git a/docs/images/backups/view_list_backups.png b/docs/images/backups/view_list_backups.png
deleted file mode 100644
index a17ca24d..00000000
Binary files a/docs/images/backups/view_list_backups.png and /dev/null differ
diff --git a/docs/images/cloud-connectivity/aws-direct-connect-multi-region-failover.png b/docs/images/cloud-connectivity/aws-direct-connect-multi-region-failover.png
deleted file mode 100644
index 5c5d89b6..00000000
Binary files a/docs/images/cloud-connectivity/aws-direct-connect-multi-region-failover.png and /dev/null differ
diff --git a/docs/images/cloud-connectivity/aws-direct-connect.png b/docs/images/cloud-connectivity/aws-direct-connect.png
deleted file mode 100644
index 9d465dae..00000000
Binary files a/docs/images/cloud-connectivity/aws-direct-connect.png and /dev/null differ
diff --git a/docs/images/cloud-connectivity/aws-private-link.png b/docs/images/cloud-connectivity/aws-private-link.png
deleted file mode 100644
index 0cc85d4b..00000000
Binary files a/docs/images/cloud-connectivity/aws-private-link.png and /dev/null differ
diff --git a/docs/images/cloud-connectivity/internet-delivery.png b/docs/images/cloud-connectivity/internet-delivery.png
deleted file mode 100644
index 3ef4a568..00000000
Binary files a/docs/images/cloud-connectivity/internet-delivery.png and /dev/null differ
diff --git a/docs/images/cloud-connectivity/ipsec-redundancy-options.png b/docs/images/cloud-connectivity/ipsec-redundancy-options.png
deleted file mode 100644
index cb5f25bc..00000000
Binary files a/docs/images/cloud-connectivity/ipsec-redundancy-options.png and /dev/null differ
diff --git a/docs/images/cloud-connectivity/ipsec-vpn.png b/docs/images/cloud-connectivity/ipsec-vpn.png
deleted file mode 100644
index 3593af7b..00000000
Binary files a/docs/images/cloud-connectivity/ipsec-vpn.png and /dev/null differ
diff --git a/docs/images/console/admin-console-login-account-linking.png b/docs/images/console/admin-console-login-account-linking.png
deleted file mode 100644
index caf93d76..00000000
Binary files a/docs/images/console/admin-console-login-account-linking.png and /dev/null differ
diff --git a/docs/images/console/admin-console-login.png b/docs/images/console/admin-console-login.png
deleted file mode 100644
index 4eed84c8..00000000
Binary files a/docs/images/console/admin-console-login.png and /dev/null differ
diff --git a/docs/images/console/admin_console_from_ui_1.png b/docs/images/console/admin_console_from_ui_1.png
deleted file mode 100644
index ad9995d2..00000000
Binary files a/docs/images/console/admin_console_from_ui_1.png and /dev/null differ
diff --git a/docs/images/console/admin_console_from_ui_2.png b/docs/images/console/admin_console_from_ui_2.png
deleted file mode 100644
index 92a47102..00000000
Binary files a/docs/images/console/admin_console_from_ui_2.png and /dev/null differ
diff --git a/docs/images/console/admin_console_from_ui_3.png b/docs/images/console/admin_console_from_ui_3.png
deleted file mode 100644
index 05eb8710..00000000
Binary files a/docs/images/console/admin_console_from_ui_3.png and /dev/null differ
diff --git a/docs/images/console/apply_version_upgrade.png b/docs/images/console/apply_version_upgrade.png
deleted file mode 100644
index a693fed6..00000000
Binary files a/docs/images/console/apply_version_upgrade.png and /dev/null differ
diff --git a/docs/images/console/complete_upgrade.png b/docs/images/console/complete_upgrade.png
deleted file mode 100644
index 6b203dd8..00000000
Binary files a/docs/images/console/complete_upgrade.png and /dev/null differ
diff --git a/docs/images/console/configmap_env_full.png b/docs/images/console/configmap_env_full.png
deleted file mode 100644
index 6963b6e3..00000000
Binary files a/docs/images/console/configmap_env_full.png and /dev/null differ
diff --git a/docs/images/console/console-email-invite.png b/docs/images/console/console-email-invite.png
deleted file mode 100644
index 78c9473e..00000000
Binary files a/docs/images/console/console-email-invite.png and /dev/null differ
diff --git a/docs/images/console/console-settings-admin.png b/docs/images/console/console-settings-admin.png
deleted file mode 100644
index b6dd079b..00000000
Binary files a/docs/images/console/console-settings-admin.png and /dev/null differ
diff --git a/docs/images/console/console_administrators_invite.png b/docs/images/console/console_administrators_invite.png
deleted file mode 100644
index 5be2f35a..00000000
Binary files a/docs/images/console/console_administrators_invite.png and /dev/null differ
diff --git a/docs/images/console/console_administrators_invite_confirm.png b/docs/images/console/console_administrators_invite_confirm.png
deleted file mode 100644
index cf049424..00000000
Binary files a/docs/images/console/console_administrators_invite_confirm.png and /dev/null differ
diff --git a/docs/images/console/console_administrators_nav.png b/docs/images/console/console_administrators_nav.png
deleted file mode 100644
index cffdf1d0..00000000
Binary files a/docs/images/console/console_administrators_nav.png and /dev/null differ
diff --git a/docs/images/console/console_click_instance_link.png b/docs/images/console/console_click_instance_link.png
deleted file mode 100644
index 61fc934d..00000000
Binary files a/docs/images/console/console_click_instance_link.png and /dev/null differ
diff --git a/docs/images/console/console_summary_view.png b/docs/images/console/console_summary_view.png
deleted file mode 100644
index d90e52f4..00000000
Binary files a/docs/images/console/console_summary_view.png and /dev/null differ
diff --git a/docs/images/console/database.png b/docs/images/console/database.png
deleted file mode 100644
index d779500e..00000000
Binary files a/docs/images/console/database.png and /dev/null differ
diff --git a/docs/images/console/database_snapshots.png b/docs/images/console/database_snapshots.png
deleted file mode 100644
index 0dc9539e..00000000
Binary files a/docs/images/console/database_snapshots.png and /dev/null differ
diff --git a/docs/images/console/deployment.png b/docs/images/console/deployment.png
deleted file mode 100644
index 4d493c4b..00000000
Binary files a/docs/images/console/deployment.png and /dev/null differ
diff --git a/docs/images/console/domains_and_certs.png b/docs/images/console/domains_and_certs.png
deleted file mode 100644
index 6659b523..00000000
Binary files a/docs/images/console/domains_and_certs.png and /dev/null differ
diff --git a/docs/images/console/hostnames_manager.png b/docs/images/console/hostnames_manager.png
deleted file mode 100644
index 0f8657a7..00000000
Binary files a/docs/images/console/hostnames_manager.png and /dev/null differ
diff --git a/docs/images/console/hostnames_view.png b/docs/images/console/hostnames_view.png
deleted file mode 100644
index 182c6d57..00000000
Binary files a/docs/images/console/hostnames_view.png and /dev/null differ
diff --git a/docs/images/console/info_panel.png b/docs/images/console/info_panel.png
deleted file mode 100644
index ed099df5..00000000
Binary files a/docs/images/console/info_panel.png and /dev/null differ
diff --git a/docs/images/console/ingress.png b/docs/images/console/ingress.png
deleted file mode 100644
index 012dadca..00000000
Binary files a/docs/images/console/ingress.png and /dev/null differ
diff --git a/docs/images/console/ingress_allow_list.png b/docs/images/console/ingress_allow_list.png
deleted file mode 100644
index 9dbbfff6..00000000
Binary files a/docs/images/console/ingress_allow_list.png and /dev/null differ
diff --git a/docs/images/console/instance_click_login.png b/docs/images/console/instance_click_login.png
deleted file mode 100644
index 8d53f789..00000000
Binary files a/docs/images/console/instance_click_login.png and /dev/null differ
diff --git a/docs/images/console/instance_login.png b/docs/images/console/instance_login.png
deleted file mode 100644
index 6d6d032b..00000000
Binary files a/docs/images/console/instance_login.png and /dev/null differ
diff --git a/docs/images/console/manage_instance.png b/docs/images/console/manage_instance.png
deleted file mode 100644
index f033c922..00000000
Binary files a/docs/images/console/manage_instance.png and /dev/null differ
diff --git a/docs/images/console/namespace.png b/docs/images/console/namespace.png
deleted file mode 100644
index f59466db..00000000
Binary files a/docs/images/console/namespace.png and /dev/null differ
diff --git a/docs/images/console/netbox-cloud-plugins_1.png b/docs/images/console/netbox-cloud-plugins_1.png
deleted file mode 100644
index 4524e972..00000000
Binary files a/docs/images/console/netbox-cloud-plugins_1.png and /dev/null differ
diff --git a/docs/images/console/netbox-cloud-plugins_2.png b/docs/images/console/netbox-cloud-plugins_2.png
deleted file mode 100644
index c1341f03..00000000
Binary files a/docs/images/console/netbox-cloud-plugins_2.png and /dev/null differ
diff --git a/docs/images/console/netbox.png b/docs/images/console/netbox.png
deleted file mode 100644
index 52d483eb..00000000
Binary files a/docs/images/console/netbox.png and /dev/null differ
diff --git a/docs/images/console/orgs.png b/docs/images/console/orgs.png
deleted file mode 100644
index 413b1467..00000000
Binary files a/docs/images/console/orgs.png and /dev/null differ
diff --git a/docs/images/console/pods.png b/docs/images/console/pods.png
deleted file mode 100644
index ae27df92..00000000
Binary files a/docs/images/console/pods.png and /dev/null differ
diff --git a/docs/images/console/redis.png b/docs/images/console/redis.png
deleted file mode 100644
index 8183bcd0..00000000
Binary files a/docs/images/console/redis.png and /dev/null differ
diff --git a/docs/images/console/refesh_logs.png b/docs/images/console/refesh_logs.png
deleted file mode 100644
index 25d1e7c0..00000000
Binary files a/docs/images/console/refesh_logs.png and /dev/null differ
diff --git a/docs/images/console/secrets.png b/docs/images/console/secrets.png
deleted file mode 100644
index 8803259e..00000000
Binary files a/docs/images/console/secrets.png and /dev/null differ
diff --git a/docs/images/console/settings.png b/docs/images/console/settings.png
deleted file mode 100644
index a73b91e7..00000000
Binary files a/docs/images/console/settings.png and /dev/null differ
diff --git a/docs/images/console/startup_configmaps.png b/docs/images/console/startup_configmaps.png
deleted file mode 100644
index c996e42b..00000000
Binary files a/docs/images/console/startup_configmaps.png and /dev/null differ
diff --git a/docs/images/console/storage.png b/docs/images/console/storage.png
deleted file mode 100644
index 7fa92045..00000000
Binary files a/docs/images/console/storage.png and /dev/null differ
diff --git a/docs/images/console/version_upgrade.png b/docs/images/console/version_upgrade.png
deleted file mode 100644
index a9408505..00000000
Binary files a/docs/images/console/version_upgrade.png and /dev/null differ
diff --git a/docs/images/console/view_logs.png b/docs/images/console/view_logs.png
deleted file mode 100644
index 8237d813..00000000
Binary files a/docs/images/console/view_logs.png and /dev/null differ
diff --git a/docs/images/console/view_logs_2.png b/docs/images/console/view_logs_2.png
deleted file mode 100644
index f7fefff5..00000000
Binary files a/docs/images/console/view_logs_2.png and /dev/null differ
diff --git a/docs/images/console_access/admin_login.png b/docs/images/console_access/admin_login.png
deleted file mode 100644
index 20355ca2..00000000
Binary files a/docs/images/console_access/admin_login.png and /dev/null differ
diff --git a/docs/images/console_access/click_namespace_id.png b/docs/images/console_access/click_namespace_id.png
deleted file mode 100644
index 1bfb72a8..00000000
Binary files a/docs/images/console_access/click_namespace_id.png and /dev/null differ
diff --git a/docs/images/console_access/click_namespace_name.png b/docs/images/console_access/click_namespace_name.png
deleted file mode 100644
index 3acea0fc..00000000
Binary files a/docs/images/console_access/click_namespace_name.png and /dev/null differ
diff --git a/docs/images/console_access/confirm_totp.png b/docs/images/console_access/confirm_totp.png
deleted file mode 100644
index 9bfb567d..00000000
Binary files a/docs/images/console_access/confirm_totp.png and /dev/null differ
diff --git a/docs/images/console_access/get_admin_secret.png b/docs/images/console_access/get_admin_secret.png
deleted file mode 100644
index 091c685b..00000000
Binary files a/docs/images/console_access/get_admin_secret.png and /dev/null differ
diff --git a/docs/images/console_access/get_credentials.png b/docs/images/console_access/get_credentials.png
deleted file mode 100644
index 5f0afe70..00000000
Binary files a/docs/images/console_access/get_credentials.png and /dev/null differ
diff --git a/docs/images/console_access/get_secrets.png b/docs/images/console_access/get_secrets.png
deleted file mode 100644
index 49f3aa78..00000000
Binary files a/docs/images/console_access/get_secrets.png and /dev/null differ
diff --git a/docs/images/console_access/instance_id.png b/docs/images/console_access/instance_id.png
deleted file mode 100644
index e8453535..00000000
Binary files a/docs/images/console_access/instance_id.png and /dev/null differ
diff --git a/docs/images/console_access/launch_ui.png b/docs/images/console_access/launch_ui.png
deleted file mode 100644
index cfd2dc42..00000000
Binary files a/docs/images/console_access/launch_ui.png and /dev/null differ
diff --git a/docs/images/console_access/netbox_section.png b/docs/images/console_access/netbox_section.png
deleted file mode 100644
index d8158dd8..00000000
Binary files a/docs/images/console_access/netbox_section.png and /dev/null differ
diff --git a/docs/images/console_access/set_up_totp.png b/docs/images/console_access/set_up_totp.png
deleted file mode 100644
index 3b4d8847..00000000
Binary files a/docs/images/console_access/set_up_totp.png and /dev/null differ
diff --git a/docs/images/console_access/view_instances.png b/docs/images/console_access/view_instances.png
deleted file mode 100644
index ffd67862..00000000
Binary files a/docs/images/console_access/view_instances.png and /dev/null differ
diff --git a/docs/images/database_snapshots/db_snapshots_1.png b/docs/images/database_snapshots/db_snapshots_1.png
deleted file mode 100644
index 3cdde70d..00000000
Binary files a/docs/images/database_snapshots/db_snapshots_1.png and /dev/null differ
diff --git a/docs/images/database_snapshots/db_snapshots_2.png b/docs/images/database_snapshots/db_snapshots_2.png
deleted file mode 100644
index c1fdaf1d..00000000
Binary files a/docs/images/database_snapshots/db_snapshots_2.png and /dev/null differ
diff --git a/docs/images/database_snapshots/db_snapshots_3.png b/docs/images/database_snapshots/db_snapshots_3.png
deleted file mode 100644
index 6dce6ce3..00000000
Binary files a/docs/images/database_snapshots/db_snapshots_3.png and /dev/null differ
diff --git a/docs/images/database_snapshots/db_snapshots_4.png b/docs/images/database_snapshots/db_snapshots_4.png
deleted file mode 100644
index 1802f4a3..00000000
Binary files a/docs/images/database_snapshots/db_snapshots_4.png and /dev/null differ
diff --git a/docs/images/database_snapshots/db_snapshots_5.png b/docs/images/database_snapshots/db_snapshots_5.png
deleted file mode 100644
index 872d6cb8..00000000
Binary files a/docs/images/database_snapshots/db_snapshots_5.png and /dev/null differ
diff --git a/docs/images/getting_started/add_config_revision.png b/docs/images/getting_started/add_config_revision.png
deleted file mode 100644
index 789ccd2f..00000000
Binary files a/docs/images/getting_started/add_config_revision.png and /dev/null differ
diff --git a/docs/images/getting_started/cloud_nav_menu.png b/docs/images/getting_started/cloud_nav_menu.png
deleted file mode 100644
index 82df2435..00000000
Binary files a/docs/images/getting_started/cloud_nav_menu.png and /dev/null differ
diff --git a/docs/images/getting_started/custom_scripts.png b/docs/images/getting_started/custom_scripts.png
deleted file mode 100644
index b71de476..00000000
Binary files a/docs/images/getting_started/custom_scripts.png and /dev/null differ
diff --git a/docs/images/getting_started/database_backup.png b/docs/images/getting_started/database_backup.png
deleted file mode 100644
index d808529e..00000000
Binary files a/docs/images/getting_started/database_backup.png and /dev/null differ
diff --git a/docs/images/getting_started/login_auth.png b/docs/images/getting_started/login_auth.png
deleted file mode 100644
index 0067bc54..00000000
Binary files a/docs/images/getting_started/login_auth.png and /dev/null differ
diff --git a/docs/images/getting_started/plugins.png b/docs/images/getting_started/plugins.png
deleted file mode 100644
index c61035cb..00000000
Binary files a/docs/images/getting_started/plugins.png and /dev/null differ
diff --git a/docs/images/getting_started/reports_management.png b/docs/images/getting_started/reports_management.png
deleted file mode 100644
index d5b14fcc..00000000
Binary files a/docs/images/getting_started/reports_management.png and /dev/null differ
diff --git a/docs/images/integrations/ansible-colection/ansible_collection.png b/docs/images/integrations/ansible-colection/ansible_collection.png
deleted file mode 100644
index 2f48fdb2..00000000
Binary files a/docs/images/integrations/ansible-colection/ansible_collection.png and /dev/null differ
diff --git a/docs/images/integrations/ansible-colection/cisco-live-sites-and-devices.png b/docs/images/integrations/ansible-colection/cisco-live-sites-and-devices.png
deleted file mode 100644
index d7b70db3..00000000
Binary files a/docs/images/integrations/ansible-colection/cisco-live-sites-and-devices.png and /dev/null differ
diff --git a/docs/images/integrations/pyats/pyats-webinar-devices.png b/docs/images/integrations/pyats/pyats-webinar-devices.png
deleted file mode 100644
index ed76c013..00000000
Binary files a/docs/images/integrations/pyats/pyats-webinar-devices.png and /dev/null differ
diff --git a/docs/images/integrations/pyats/topology.png b/docs/images/integrations/pyats/topology.png
deleted file mode 100644
index 9d325163..00000000
Binary files a/docs/images/integrations/pyats/topology.png and /dev/null differ
diff --git a/docs/images/integrations/service-now/service-now-object-map.png b/docs/images/integrations/service-now/service-now-object-map.png
deleted file mode 100644
index 5494f827..00000000
Binary files a/docs/images/integrations/service-now/service-now-object-map.png and /dev/null differ
diff --git a/docs/images/ip_allow_list/ip_allow_list_1.png b/docs/images/ip_allow_list/ip_allow_list_1.png
deleted file mode 100644
index 3ee3b061..00000000
Binary files a/docs/images/ip_allow_list/ip_allow_list_1.png and /dev/null differ
diff --git a/docs/images/ip_allow_list/ip_allow_list_2.png b/docs/images/ip_allow_list/ip_allow_list_2.png
deleted file mode 100644
index 7e183036..00000000
Binary files a/docs/images/ip_allow_list/ip_allow_list_2.png and /dev/null differ
diff --git a/docs/images/ip_allow_list/ip_allow_list_3.png b/docs/images/ip_allow_list/ip_allow_list_3.png
deleted file mode 100644
index 09f533d5..00000000
Binary files a/docs/images/ip_allow_list/ip_allow_list_3.png and /dev/null differ
diff --git a/docs/images/ip_allow_list/ip_allow_list_4.png b/docs/images/ip_allow_list/ip_allow_list_4.png
deleted file mode 100644
index 4df02c76..00000000
Binary files a/docs/images/ip_allow_list/ip_allow_list_4.png and /dev/null differ
diff --git a/docs/images/ip_allow_list/ip_allow_list_5.png b/docs/images/ip_allow_list/ip_allow_list_5.png
deleted file mode 100644
index fe19888f..00000000
Binary files a/docs/images/ip_allow_list/ip_allow_list_5.png and /dev/null differ
diff --git a/docs/images/netbox-enterprise/LDAP/netbox-enterprise-ec-ldap.png b/docs/images/netbox-enterprise/LDAP/netbox-enterprise-ec-ldap.png
deleted file mode 100644
index 31c1b953..00000000
Binary files a/docs/images/netbox-enterprise/LDAP/netbox-enterprise-ec-ldap.png and /dev/null differ
diff --git a/docs/images/netbox-enterprise/SAML/netbox-enterprise-saml-attributes.png b/docs/images/netbox-enterprise/SAML/netbox-enterprise-saml-attributes.png
deleted file mode 100644
index 74f01693..00000000
Binary files a/docs/images/netbox-enterprise/SAML/netbox-enterprise-saml-attributes.png and /dev/null differ
diff --git a/docs/images/netbox-enterprise/SAML/netbox-enterprise-saml-idp-groups.png b/docs/images/netbox-enterprise/SAML/netbox-enterprise-saml-idp-groups.png
deleted file mode 100644
index 27ad2ca3..00000000
Binary files a/docs/images/netbox-enterprise/SAML/netbox-enterprise-saml-idp-groups.png and /dev/null differ
diff --git a/docs/images/netbox-enterprise/SAML/netbox-enterprise-saml-idp.png b/docs/images/netbox-enterprise/SAML/netbox-enterprise-saml-idp.png
deleted file mode 100644
index 63957b0b..00000000
Binary files a/docs/images/netbox-enterprise/SAML/netbox-enterprise-saml-idp.png and /dev/null differ
diff --git a/docs/images/netbox-enterprise/admin-console.png b/docs/images/netbox-enterprise/admin-console.png
deleted file mode 100644
index f2d11814..00000000
Binary files a/docs/images/netbox-enterprise/admin-console.png and /dev/null differ
diff --git a/docs/images/netbox-enterprise/advanced_settings.png b/docs/images/netbox-enterprise/advanced_settings.png
deleted file mode 100644
index 37ccebae..00000000
Binary files a/docs/images/netbox-enterprise/advanced_settings.png and /dev/null differ
diff --git a/docs/images/netbox-enterprise/custom-plugins/ent-config-tab.png b/docs/images/netbox-enterprise/custom-plugins/ent-config-tab.png
deleted file mode 100644
index 5e47a5bf..00000000
Binary files a/docs/images/netbox-enterprise/custom-plugins/ent-config-tab.png and /dev/null differ
diff --git a/docs/images/netbox-enterprise/custom-plugins/ent-custom-plugins.png b/docs/images/netbox-enterprise/custom-plugins/ent-custom-plugins.png
deleted file mode 100644
index 3856a1b7..00000000
Binary files a/docs/images/netbox-enterprise/custom-plugins/ent-custom-plugins.png and /dev/null differ
diff --git a/docs/images/netbox-enterprise/custom-plugins/ent-show-advanced-settings.png b/docs/images/netbox-enterprise/custom-plugins/ent-show-advanced-settings.png
deleted file mode 100644
index a5eb9dec..00000000
Binary files a/docs/images/netbox-enterprise/custom-plugins/ent-show-advanced-settings.png and /dev/null differ
diff --git a/docs/images/netbox-enterprise/installation/ent-01-welcome.png b/docs/images/netbox-enterprise/installation/ent-01-welcome.png
deleted file mode 100644
index 16a9778d..00000000
Binary files a/docs/images/netbox-enterprise/installation/ent-01-welcome.png and /dev/null differ
diff --git a/docs/images/netbox-enterprise/installation/ent-02a-tls.png b/docs/images/netbox-enterprise/installation/ent-02a-tls.png
deleted file mode 100644
index 9c6e03b9..00000000
Binary files a/docs/images/netbox-enterprise/installation/ent-02a-tls.png and /dev/null differ
diff --git a/docs/images/netbox-enterprise/installation/ent-02b-tls.png b/docs/images/netbox-enterprise/installation/ent-02b-tls.png
deleted file mode 100644
index d10674fd..00000000
Binary files a/docs/images/netbox-enterprise/installation/ent-02b-tls.png and /dev/null differ
diff --git a/docs/images/netbox-enterprise/installation/ent-03-login.png b/docs/images/netbox-enterprise/installation/ent-03-login.png
deleted file mode 100644
index 46bedd8d..00000000
Binary files a/docs/images/netbox-enterprise/installation/ent-03-login.png and /dev/null differ
diff --git a/docs/images/netbox-enterprise/installation/ent-04-cluster.png b/docs/images/netbox-enterprise/installation/ent-04-cluster.png
deleted file mode 100644
index 2223ec1f..00000000
Binary files a/docs/images/netbox-enterprise/installation/ent-04-cluster.png and /dev/null differ
diff --git a/docs/images/netbox-enterprise/installation/ent-05-superuser.png b/docs/images/netbox-enterprise/installation/ent-05-superuser.png
deleted file mode 100644
index 1c8035af..00000000
Binary files a/docs/images/netbox-enterprise/installation/ent-05-superuser.png and /dev/null differ
diff --git a/docs/images/netbox-enterprise/installation/ent-06-replicas-and-resources.png b/docs/images/netbox-enterprise/installation/ent-06-replicas-and-resources.png
deleted file mode 100644
index 1505a951..00000000
Binary files a/docs/images/netbox-enterprise/installation/ent-06-replicas-and-resources.png and /dev/null differ
diff --git a/docs/images/netbox-enterprise/installation/ent-07-postgresql.png b/docs/images/netbox-enterprise/installation/ent-07-postgresql.png
deleted file mode 100644
index 11cf9ab2..00000000
Binary files a/docs/images/netbox-enterprise/installation/ent-07-postgresql.png and /dev/null differ
diff --git a/docs/images/netbox-enterprise/installation/ent-08-redis.png b/docs/images/netbox-enterprise/installation/ent-08-redis.png
deleted file mode 100644
index 65c6f87f..00000000
Binary files a/docs/images/netbox-enterprise/installation/ent-08-redis.png and /dev/null differ
diff --git a/docs/images/netbox-enterprise/installation/ent-09-accept.png b/docs/images/netbox-enterprise/installation/ent-09-accept.png
deleted file mode 100644
index 7df915e6..00000000
Binary files a/docs/images/netbox-enterprise/installation/ent-09-accept.png and /dev/null differ
diff --git a/docs/images/netbox-enterprise/installation/ent-10-preflights.png b/docs/images/netbox-enterprise/installation/ent-10-preflights.png
deleted file mode 100644
index 99c54313..00000000
Binary files a/docs/images/netbox-enterprise/installation/ent-10-preflights.png and /dev/null differ
diff --git a/docs/images/netbox-enterprise/installation/ent-11-deploying.png b/docs/images/netbox-enterprise/installation/ent-11-deploying.png
deleted file mode 100644
index 3b72052b..00000000
Binary files a/docs/images/netbox-enterprise/installation/ent-11-deploying.png and /dev/null differ
diff --git a/docs/images/netbox-enterprise/installation/ent-12-ready.png b/docs/images/netbox-enterprise/installation/ent-12-ready.png
deleted file mode 100644
index 0dab81cf..00000000
Binary files a/docs/images/netbox-enterprise/installation/ent-12-ready.png and /dev/null differ
diff --git a/docs/images/netbox-enterprise/installation/ent-13-nb-login.png b/docs/images/netbox-enterprise/installation/ent-13-nb-login.png
deleted file mode 100644
index 472c6335..00000000
Binary files a/docs/images/netbox-enterprise/installation/ent-13-nb-login.png and /dev/null differ
diff --git a/docs/images/netbox-enterprise/installation/ent-14-nb-home.png b/docs/images/netbox-enterprise/installation/ent-14-nb-home.png
deleted file mode 100644
index 14c01503..00000000
Binary files a/docs/images/netbox-enterprise/installation/ent-14-nb-home.png and /dev/null differ
diff --git a/docs/images/netbox-enterprise/netbox-enterprise-advanced.png b/docs/images/netbox-enterprise/netbox-enterprise-advanced.png
deleted file mode 100644
index cc50b714..00000000
Binary files a/docs/images/netbox-enterprise/netbox-enterprise-advanced.png and /dev/null differ
diff --git a/docs/images/netbox-enterprise/netbox-enterprise-configure-netbox.png b/docs/images/netbox-enterprise/netbox-enterprise-configure-netbox.png
deleted file mode 100644
index 2cf28da0..00000000
Binary files a/docs/images/netbox-enterprise/netbox-enterprise-configure-netbox.png and /dev/null differ
diff --git a/docs/images/netbox-enterprise/netbox-enterprise-debug-checkbox.png b/docs/images/netbox-enterprise/netbox-enterprise-debug-checkbox.png
deleted file mode 100644
index 9671bc1a..00000000
Binary files a/docs/images/netbox-enterprise/netbox-enterprise-debug-checkbox.png and /dev/null differ
diff --git a/docs/images/netbox-enterprise/netbox-enterprise-debug-logging-example.png b/docs/images/netbox-enterprise/netbox-enterprise-debug-logging-example.png
deleted file mode 100644
index 668f9e87..00000000
Binary files a/docs/images/netbox-enterprise/netbox-enterprise-debug-logging-example.png and /dev/null differ
diff --git a/docs/images/netbox-enterprise/netbox-enterprise-deploy.png b/docs/images/netbox-enterprise/netbox-enterprise-deploy.png
deleted file mode 100644
index 4273d452..00000000
Binary files a/docs/images/netbox-enterprise/netbox-enterprise-deploy.png and /dev/null differ
diff --git a/docs/images/netbox-enterprise/netbox-enterprise-ec-backup-settings.png b/docs/images/netbox-enterprise/netbox-enterprise-ec-backup-settings.png
deleted file mode 100644
index f9ff439a..00000000
Binary files a/docs/images/netbox-enterprise/netbox-enterprise-ec-backup-settings.png and /dev/null differ
diff --git a/docs/images/netbox-enterprise/netbox-enterprise-ec-configure-s3.png b/docs/images/netbox-enterprise/netbox-enterprise-ec-configure-s3.png
deleted file mode 100644
index 9973d2c1..00000000
Binary files a/docs/images/netbox-enterprise/netbox-enterprise-ec-configure-s3.png and /dev/null differ
diff --git a/docs/images/netbox-enterprise/netbox-enterprise-ec-restore-complete.png b/docs/images/netbox-enterprise/netbox-enterprise-ec-restore-complete.png
deleted file mode 100644
index f2fac6d6..00000000
Binary files a/docs/images/netbox-enterprise/netbox-enterprise-ec-restore-complete.png and /dev/null differ
diff --git a/docs/images/netbox-enterprise/netbox-enterprise-ec-restore-continue.png b/docs/images/netbox-enterprise/netbox-enterprise-ec-restore-continue.png
deleted file mode 100644
index 62a0b18f..00000000
Binary files a/docs/images/netbox-enterprise/netbox-enterprise-ec-restore-continue.png and /dev/null differ
diff --git a/docs/images/netbox-enterprise/netbox-enterprise-ec-restore-prompt.png b/docs/images/netbox-enterprise/netbox-enterprise-ec-restore-prompt.png
deleted file mode 100644
index 68d23cb5..00000000
Binary files a/docs/images/netbox-enterprise/netbox-enterprise-ec-restore-prompt.png and /dev/null differ
diff --git a/docs/images/netbox-enterprise/netbox-enterprise-ec-restore-s3.png b/docs/images/netbox-enterprise/netbox-enterprise-ec-restore-s3.png
deleted file mode 100644
index b12a3bc6..00000000
Binary files a/docs/images/netbox-enterprise/netbox-enterprise-ec-restore-s3.png and /dev/null differ
diff --git a/docs/images/netbox-enterprise/netbox-enterprise-ec-start-backup.png b/docs/images/netbox-enterprise/netbox-enterprise-ec-start-backup.png
deleted file mode 100644
index 7661290a..00000000
Binary files a/docs/images/netbox-enterprise/netbox-enterprise-ec-start-backup.png and /dev/null differ
diff --git a/docs/images/netbox-enterprise/netbox-enterprise-ec-update-settings.png b/docs/images/netbox-enterprise/netbox-enterprise-ec-update-settings.png
deleted file mode 100644
index 587dd178..00000000
Binary files a/docs/images/netbox-enterprise/netbox-enterprise-ec-update-settings.png and /dev/null differ
diff --git a/docs/images/netbox-enterprise/netbox-enterprise-ready.png b/docs/images/netbox-enterprise/netbox-enterprise-ready.png
deleted file mode 100644
index 595a390e..00000000
Binary files a/docs/images/netbox-enterprise/netbox-enterprise-ready.png and /dev/null differ
diff --git a/docs/images/netbox-enterprise/netbox-enterprise-restore-mode-deploy.png b/docs/images/netbox-enterprise/netbox-enterprise-restore-mode-deploy.png
deleted file mode 100644
index 4bd7b150..00000000
Binary files a/docs/images/netbox-enterprise/netbox-enterprise-restore-mode-deploy.png and /dev/null differ
diff --git a/docs/images/netbox-enterprise/netbox-enterprise-restore-mode-enable.png b/docs/images/netbox-enterprise/netbox-enterprise-restore-mode-enable.png
deleted file mode 100644
index 8888a899..00000000
Binary files a/docs/images/netbox-enterprise/netbox-enterprise-restore-mode-enable.png and /dev/null differ
diff --git a/docs/images/netbox-enterprise/netbox-enterprise-restore-mode-updated-version.png b/docs/images/netbox-enterprise/netbox-enterprise-restore-mode-updated-version.png
deleted file mode 100644
index 4109b5ad..00000000
Binary files a/docs/images/netbox-enterprise/netbox-enterprise-restore-mode-updated-version.png and /dev/null differ
diff --git a/docs/images/netbox-enterprise/netbox-enterprise-s3.png b/docs/images/netbox-enterprise/netbox-enterprise-s3.png
deleted file mode 100644
index 9c73694b..00000000
Binary files a/docs/images/netbox-enterprise/netbox-enterprise-s3.png and /dev/null differ
diff --git a/docs/images/netbox-enterprise/netbox-enterprise-support-bundle-tui.png b/docs/images/netbox-enterprise/netbox-enterprise-support-bundle-tui.png
deleted file mode 100644
index c1e12b3b..00000000
Binary files a/docs/images/netbox-enterprise/netbox-enterprise-support-bundle-tui.png and /dev/null differ
diff --git a/docs/images/netbox-enterprise/netbox-enterprise-tos.png b/docs/images/netbox-enterprise/netbox-enterprise-tos.png
deleted file mode 100644
index 2eedaf8e..00000000
Binary files a/docs/images/netbox-enterprise/netbox-enterprise-tos.png and /dev/null differ
diff --git a/docs/images/netbox-enterprise/netbox-enterprise-upload-license.png b/docs/images/netbox-enterprise/netbox-enterprise-upload-license.png
deleted file mode 100644
index 0164e8ac..00000000
Binary files a/docs/images/netbox-enterprise/netbox-enterprise-upload-license.png and /dev/null differ
diff --git a/docs/images/netbox-enterprise/netbox-enterprise-version.png b/docs/images/netbox-enterprise/netbox-enterprise-version.png
deleted file mode 100644
index 97b4fafb..00000000
Binary files a/docs/images/netbox-enterprise/netbox-enterprise-version.png and /dev/null differ
diff --git a/docs/images/netbox-favicon.png b/docs/images/netbox-favicon.png
deleted file mode 100644
index 77e5b0f8..00000000
Binary files a/docs/images/netbox-favicon.png and /dev/null differ
diff --git a/docs/images/netbox-light-favicon.png b/docs/images/netbox-light-favicon.png
deleted file mode 100644
index 9057443e..00000000
Binary files a/docs/images/netbox-light-favicon.png and /dev/null differ
diff --git a/docs/images/netbox_cloud/azure_app_permissions.png b/docs/images/netbox_cloud/azure_app_permissions.png
deleted file mode 100644
index 42203d7f..00000000
Binary files a/docs/images/netbox_cloud/azure_app_permissions.png and /dev/null differ
diff --git a/docs/images/netbox_cloud/azure_keys.png b/docs/images/netbox_cloud/azure_keys.png
deleted file mode 100644
index 7e77d6b5..00000000
Binary files a/docs/images/netbox_cloud/azure_keys.png and /dev/null differ
diff --git a/docs/images/netbox_cloud/complete_upgrade.png b/docs/images/netbox_cloud/complete_upgrade.png
deleted file mode 100644
index fc7f696c..00000000
Binary files a/docs/images/netbox_cloud/complete_upgrade.png and /dev/null differ
diff --git a/docs/images/netbox_cloud/configmap_env.png b/docs/images/netbox_cloud/configmap_env.png
deleted file mode 100644
index 6f34b192..00000000
Binary files a/docs/images/netbox_cloud/configmap_env.png and /dev/null differ
diff --git a/docs/images/netbox_cloud/deployment_options.png b/docs/images/netbox_cloud/deployment_options.png
deleted file mode 100644
index 2fedc27b..00000000
Binary files a/docs/images/netbox_cloud/deployment_options.png and /dev/null differ
diff --git a/docs/images/netbox_cloud/deployment_section.png b/docs/images/netbox_cloud/deployment_section.png
deleted file mode 100644
index 27b6140d..00000000
Binary files a/docs/images/netbox_cloud/deployment_section.png and /dev/null differ
diff --git a/docs/images/netbox_cloud/deployment_upgraded_version.png b/docs/images/netbox_cloud/deployment_upgraded_version.png
deleted file mode 100644
index 68c9d4a9..00000000
Binary files a/docs/images/netbox_cloud/deployment_upgraded_version.png and /dev/null differ
diff --git a/docs/images/netbox_cloud/expand_pods.png b/docs/images/netbox_cloud/expand_pods.png
deleted file mode 100644
index 6695d78a..00000000
Binary files a/docs/images/netbox_cloud/expand_pods.png and /dev/null differ
diff --git a/docs/images/netbox_cloud/netbox_azure_login.png b/docs/images/netbox_cloud/netbox_azure_login.png
deleted file mode 100644
index 16ab2bc0..00000000
Binary files a/docs/images/netbox_cloud/netbox_azure_login.png and /dev/null differ
diff --git a/docs/images/netbox_cloud/pending_pod.png b/docs/images/netbox_cloud/pending_pod.png
deleted file mode 100644
index ad5a786c..00000000
Binary files a/docs/images/netbox_cloud/pending_pod.png and /dev/null differ
diff --git a/docs/images/netbox_cloud/pod_log_view.png b/docs/images/netbox_cloud/pod_log_view.png
deleted file mode 100644
index 616a5f4c..00000000
Binary files a/docs/images/netbox_cloud/pod_log_view.png and /dev/null differ
diff --git a/docs/images/netbox_cloud/refresh_pods.png b/docs/images/netbox_cloud/refresh_pods.png
deleted file mode 100644
index d9c73eaa..00000000
Binary files a/docs/images/netbox_cloud/refresh_pods.png and /dev/null differ
diff --git a/docs/images/netbox_cloud/version_number.png b/docs/images/netbox_cloud/version_number.png
deleted file mode 100644
index 248e3d0e..00000000
Binary files a/docs/images/netbox_cloud/version_number.png and /dev/null differ
diff --git a/docs/images/okta-sso/netbox_okta_login.png b/docs/images/okta-sso/netbox_okta_login.png
deleted file mode 100644
index 34df39cb..00000000
Binary files a/docs/images/okta-sso/netbox_okta_login.png and /dev/null differ
diff --git a/docs/images/okta-sso/okta_create_app_registration.png b/docs/images/okta-sso/okta_create_app_registration.png
deleted file mode 100644
index 7a62d3d9..00000000
Binary files a/docs/images/okta-sso/okta_create_app_registration.png and /dev/null differ
diff --git a/docs/images/okta-sso/okta_integration_parameters.png b/docs/images/okta-sso/okta_integration_parameters.png
deleted file mode 100644
index b5d7794e..00000000
Binary files a/docs/images/okta-sso/okta_integration_parameters.png and /dev/null differ
diff --git a/docs/images/okta-sso/okta_login_portal.png b/docs/images/okta-sso/okta_login_portal.png
deleted file mode 100644
index 48b62d3e..00000000
Binary files a/docs/images/okta-sso/okta_login_portal.png and /dev/null differ
diff --git a/docs/images/okta-sso/okta_web_app_integration.png b/docs/images/okta-sso/okta_web_app_integration.png
deleted file mode 100644
index 6587127c..00000000
Binary files a/docs/images/okta-sso/okta_web_app_integration.png and /dev/null differ
diff --git a/docs/images/prefix-lists/create-prefix-list-non-sync-1.png b/docs/images/prefix-lists/create-prefix-list-non-sync-1.png
deleted file mode 100644
index 1e062505..00000000
Binary files a/docs/images/prefix-lists/create-prefix-list-non-sync-1.png and /dev/null differ
diff --git a/docs/images/prefix-lists/create-prefix-list-non-sync-2.png b/docs/images/prefix-lists/create-prefix-list-non-sync-2.png
deleted file mode 100644
index d0ea1e98..00000000
Binary files a/docs/images/prefix-lists/create-prefix-list-non-sync-2.png and /dev/null differ
diff --git a/docs/images/prefix-lists/create-prefix-list-non-sync-3.png b/docs/images/prefix-lists/create-prefix-list-non-sync-3.png
deleted file mode 100644
index dfd292eb..00000000
Binary files a/docs/images/prefix-lists/create-prefix-list-non-sync-3.png and /dev/null differ
diff --git a/docs/images/prefix-lists/create-prefix-list-sync-1.png b/docs/images/prefix-lists/create-prefix-list-sync-1.png
deleted file mode 100644
index 5817ba0e..00000000
Binary files a/docs/images/prefix-lists/create-prefix-list-sync-1.png and /dev/null differ
diff --git a/docs/images/prefix-lists/create-prefix-list-sync-2.png b/docs/images/prefix-lists/create-prefix-list-sync-2.png
deleted file mode 100644
index f6ae9c75..00000000
Binary files a/docs/images/prefix-lists/create-prefix-list-sync-2.png and /dev/null differ
diff --git a/docs/images/prefix-lists/create-prefix-list-sync-3.png b/docs/images/prefix-lists/create-prefix-list-sync-3.png
deleted file mode 100644
index dff6fe34..00000000
Binary files a/docs/images/prefix-lists/create-prefix-list-sync-3.png and /dev/null differ
diff --git a/docs/images/prefix-lists/create-prefix-list-sync-4.png b/docs/images/prefix-lists/create-prefix-list-sync-4.png
deleted file mode 100644
index 12caaf53..00000000
Binary files a/docs/images/prefix-lists/create-prefix-list-sync-4.png and /dev/null differ
diff --git a/docs/images/prefix-lists/create-prefix-list-sync-5.png b/docs/images/prefix-lists/create-prefix-list-sync-5.png
deleted file mode 100644
index c807881d..00000000
Binary files a/docs/images/prefix-lists/create-prefix-list-sync-5.png and /dev/null differ
diff --git a/docs/images/prefix-lists/create-prefix-list.png b/docs/images/prefix-lists/create-prefix-list.png
deleted file mode 100644
index 1ed522ba..00000000
Binary files a/docs/images/prefix-lists/create-prefix-list.png and /dev/null differ
diff --git a/docs/images/prefix-lists/delete-prefix-list-1.png b/docs/images/prefix-lists/delete-prefix-list-1.png
deleted file mode 100644
index fc5dedad..00000000
Binary files a/docs/images/prefix-lists/delete-prefix-list-1.png and /dev/null differ
diff --git a/docs/images/prefix-lists/delete-prefix-list-2.png b/docs/images/prefix-lists/delete-prefix-list-2.png
deleted file mode 100644
index dee9487d..00000000
Binary files a/docs/images/prefix-lists/delete-prefix-list-2.png and /dev/null differ
diff --git a/docs/images/prefix-lists/edit-prefix-list-1.png b/docs/images/prefix-lists/edit-prefix-list-1.png
deleted file mode 100644
index 24a520de..00000000
Binary files a/docs/images/prefix-lists/edit-prefix-list-1.png and /dev/null differ
diff --git a/docs/images/prefix-lists/edit-prefix-list-2.png b/docs/images/prefix-lists/edit-prefix-list-2.png
deleted file mode 100644
index 204c8b64..00000000
Binary files a/docs/images/prefix-lists/edit-prefix-list-2.png and /dev/null differ
diff --git a/docs/images/prefix-lists/edit-prefix-list-3.png b/docs/images/prefix-lists/edit-prefix-list-3.png
deleted file mode 100644
index d65846bc..00000000
Binary files a/docs/images/prefix-lists/edit-prefix-list-3.png and /dev/null differ
diff --git a/docs/images/prefix-lists/settings.png b/docs/images/prefix-lists/settings.png
deleted file mode 100644
index a484dc62..00000000
Binary files a/docs/images/prefix-lists/settings.png and /dev/null differ
diff --git a/docs/images/upgrades/netboxcloudupgrade.mov b/docs/images/upgrades/netboxcloudupgrade.mov
deleted file mode 100644
index e29dff2e..00000000
Binary files a/docs/images/upgrades/netboxcloudupgrade.mov and /dev/null differ
diff --git a/docs/images/upgrades/oldupgrades_incompatible_plugin.png b/docs/images/upgrades/oldupgrades_incompatible_plugin.png
deleted file mode 100644
index a8472908..00000000
Binary files a/docs/images/upgrades/oldupgrades_incompatible_plugin.png and /dev/null differ
diff --git a/docs/images/upgrades/oldupgrades_manage_1.png b/docs/images/upgrades/oldupgrades_manage_1.png
deleted file mode 100644
index e475a88a..00000000
Binary files a/docs/images/upgrades/oldupgrades_manage_1.png and /dev/null differ
diff --git a/docs/images/upgrades/oldupgrades_new_version_7.png b/docs/images/upgrades/oldupgrades_new_version_7.png
deleted file mode 100644
index c2f9e719..00000000
Binary files a/docs/images/upgrades/oldupgrades_new_version_7.png and /dev/null differ
diff --git a/docs/images/upgrades/oldupgrades_plugins_pre.png b/docs/images/upgrades/oldupgrades_plugins_pre.png
deleted file mode 100644
index 42fe6a7d..00000000
Binary files a/docs/images/upgrades/oldupgrades_plugins_pre.png and /dev/null differ
diff --git a/docs/images/upgrades/oldupgrades_progress_6.png b/docs/images/upgrades/oldupgrades_progress_6.png
deleted file mode 100644
index e341c483..00000000
Binary files a/docs/images/upgrades/oldupgrades_progress_6.png and /dev/null differ
diff --git a/docs/images/upgrades/oldupgrades_upgrade_4.png b/docs/images/upgrades/oldupgrades_upgrade_4.png
deleted file mode 100644
index a3fd3df2..00000000
Binary files a/docs/images/upgrades/oldupgrades_upgrade_4.png and /dev/null differ
diff --git a/docs/images/upgrades/oldupgrades_upgrade_options_3.png b/docs/images/upgrades/oldupgrades_upgrade_options_3.png
deleted file mode 100644
index 68707ff8..00000000
Binary files a/docs/images/upgrades/oldupgrades_upgrade_options_3.png and /dev/null differ
diff --git a/docs/images/upgrades/oldupgrades_version_upgrade_2.png b/docs/images/upgrades/oldupgrades_version_upgrade_2.png
deleted file mode 100644
index 429bfde5..00000000
Binary files a/docs/images/upgrades/oldupgrades_version_upgrade_2.png and /dev/null differ
diff --git a/docs/images/upgrades/oldupgrades_warning_5.png b/docs/images/upgrades/oldupgrades_warning_5.png
deleted file mode 100644
index b7409cf5..00000000
Binary files a/docs/images/upgrades/oldupgrades_warning_5.png and /dev/null differ
diff --git a/docs/images/upgrades/upgrades_incompatible_plugin.png b/docs/images/upgrades/upgrades_incompatible_plugin.png
deleted file mode 100644
index af36d075..00000000
Binary files a/docs/images/upgrades/upgrades_incompatible_plugin.png and /dev/null differ
diff --git a/docs/images/upgrades/upgrades_manage_1.png b/docs/images/upgrades/upgrades_manage_1.png
deleted file mode 100644
index f6c32861..00000000
Binary files a/docs/images/upgrades/upgrades_manage_1.png and /dev/null differ
diff --git a/docs/images/upgrades/upgrades_new_plugins_8.png b/docs/images/upgrades/upgrades_new_plugins_8.png
deleted file mode 100644
index 7c7bc9fd..00000000
Binary files a/docs/images/upgrades/upgrades_new_plugins_8.png and /dev/null differ
diff --git a/docs/images/upgrades/upgrades_new_version_6.png b/docs/images/upgrades/upgrades_new_version_6.png
deleted file mode 100644
index c2f9e719..00000000
Binary files a/docs/images/upgrades/upgrades_new_version_6.png and /dev/null differ
diff --git a/docs/images/upgrades/upgrades_new_version_7.png b/docs/images/upgrades/upgrades_new_version_7.png
deleted file mode 100644
index 73071291..00000000
Binary files a/docs/images/upgrades/upgrades_new_version_7.png and /dev/null differ
diff --git a/docs/images/upgrades/upgrades_progress_6.png b/docs/images/upgrades/upgrades_progress_6.png
deleted file mode 100644
index 021a92e5..00000000
Binary files a/docs/images/upgrades/upgrades_progress_6.png and /dev/null differ
diff --git a/docs/images/upgrades/upgrades_upgrade_4.png b/docs/images/upgrades/upgrades_upgrade_4.png
deleted file mode 100644
index 29a98a9c..00000000
Binary files a/docs/images/upgrades/upgrades_upgrade_4.png and /dev/null differ
diff --git a/docs/images/upgrades/upgrades_upgrade_options_3.png b/docs/images/upgrades/upgrades_upgrade_options_3.png
deleted file mode 100644
index ae94e22f..00000000
Binary files a/docs/images/upgrades/upgrades_upgrade_options_3.png and /dev/null differ
diff --git a/docs/images/upgrades/upgrades_warning_5.png b/docs/images/upgrades/upgrades_warning_5.png
deleted file mode 100644
index 87327a3a..00000000
Binary files a/docs/images/upgrades/upgrades_warning_5.png and /dev/null differ
diff --git a/docs/index.md b/docs/index.md
deleted file mode 100644
index 52deb066..00000000
--- a/docs/index.md
+++ /dev/null
@@ -1,83 +0,0 @@
----
-hide:
-  - navigation
-  - toc
----
-# Welcome to NetBox Enterprise Documentation
-
-Documentation for NetBox [Cloud](administration-console/console-access.md), [Enterprise](netbox-enterprise/nbe-overview.md), [Discovery & Assurance](netbox-assurance/index.md), and [Integrations](netbox-integrations/netbox-ansible-collection.md).
-
-<div class="grid cards" markdown="1">
-
-- ![NetBox Light](images/netbox-favicon.png){:class="nbl-light-img" width="30"} ![NetBox Dark](images/netbox-light-favicon.png){:class="nbl-dark-img" width="30"} __NetBox Cloud__
-    
-    All the power and flexibility of NetBox, rock solid and secure. 
-
-    Focus on building and evolving your network.
-
-    [Get started with NetBox Cloud](administration-console/console-access.md)
-
-- ![NetBox Light](images/netbox-favicon.png){:class="nbl-light-img" width="30"} ![NetBox Dark](images/netbox-light-favicon.png){:class="nbl-dark-img" width="30"} __NetBox Enterprise__
-    
-    The power of NetBox in your own infrastructure, 
-    
-    backed and enhanced by NetBox Labs.
-
-    [Get started with NetBox Enterprise](netbox-enterprise/nbe-overview.md)
-</div>
-
----
-
-## NetBox Labs Products & Integrations
-
-<div class="grid cards" markdown="1">
-
--   __NetBox Discovery__
-
-    Map your network and infrastructure. 
-    Accelerate documentation. 
-    Streamline your automation journey.
-
-    [Learn more about NetBox Discovery](netbox-discovery/index.md)
-
--   __NetBox Assurance__
-
-    Identify, understand, and eliminate 
-    operational drift.
-
-    [Learn more about NetBox Assurance](netbox-assurance/index.md)
-
--   __Cloud Connectivity__
-
-    Secure, high-performance network connectivity options for NetBox Cloud deployments.
-
-    [Learn more about Cloud Connectivity](cloud-connectivity/do-i-need-cloud-connectivity.md)
-
--   __NetBox Integrations__
-
-    Connect NetBox with your existing tools and workflows through proven integrations.
-
-    [Explore NetBox Integrations](netbox-integrations/netbox-ansible-collection.md)
-
-</div>
-
----
-
-## Open Source Projects
-
-NetBox Labs builds software in the open, with thriving communities. We help develop multiple open source projects, such as NetBox and Orb.
-
-<div class="grid cards" markdown="1">
-
--  ![NetBox Light](images/netbox-favicon.png){:class="nbl-light-img" width="30"} ![NetBox Dark](images/netbox-light-favicon.png){:class="nbl-dark-img" width="30"} __NetBox Community__
-
-    NetBox exists to empower network engineers. Since its release in 2016, it has become the go-to solution for modeling and documenting network infrastructure for thousands of organizations worldwide.
-
-    [Visit the NetBox Community GitHub page](https://github.com/netbox-community/netbox)
-
--  __NetBox Discovery Agent__
-
-    NetBox discovery agents map network resources and gather device information to build a comprehensive model of your infrastructure.
-
-    [Learn more about the NetBox Discovery Agent](netbox-discovery/index.md)
-</div>
diff --git a/docs/maintenance.md b/docs/maintenance.md
deleted file mode 100644
index ad84e715..00000000
--- a/docs/maintenance.md
+++ /dev/null
@@ -1,23 +0,0 @@
-## NetBox Upgrade Maintenance Windows
-NetBox Labs designates the following weekly upgrade windows specifically to upgrade the version of NetBox and NetBox components for NetBox Cloud customers on Tuesdays and Thursdays. These upgrade windows are used for patch, minor, and major upgrades to NetBox. Customers are assigned to one of these windows based on their time zone.
-
-- London (UK): 7:00–9:00 am (Local London time, year-round)
-- US Eastern Time: 6:00–8:00 am (Local ET, year-round)
-!!! info "Note"
-    These windows always follow local clocks in London and New York. Times automatically adjust with daylight saving.
-
-We will not perform upgrades during these windows without first notifying affected customers. If an upgrade is scheduled, customers will receive advance notice with details about the changes and any potential impact on their service.
-
-If you have any questions about these upgrade windows or anything else related to NetBox Cloud, please reach out to the NetBox Labs Support Team. We are happy to assist via email or schedule a call at your convenience.
-
-
-## General System Maintenance Windows
-There are weekly maintenance windows for the NetBox Cloud Platform on Tuesdays and Thursdays between the hours of 7:00–9:00 am (Local London time, year-round)
-
-These windows are designated for routine maintenance on the infrastructure supporting the NetBox Labs Console, NetBox Cloud instances, and other cloud products and services offered by NetBox Labs. This includes applying necessary security patches and making other infrastructure adjustments to enhance reliability, security, and performance.
-
-Not every maintenance window will be utilized, and when maintenance is performed, we always strive to complete it with no disruption to your service. If downtime is unavoidable, it is expected to last only a few minutes. In the rare case that extended downtime is required, we will provide advance notice and schedule a separate one-time maintenance window on [status.netboxlabs.com]( https://status.netboxlabs.com/). Routine Tuesday/Thursday maintenance windows will not be listed on the status page.
-
-If you have any automation jobs running during these maintenance windows, we recommend ensuring they include business logic to properly handle failed requests and/or adjusting their schedule to run outside the maintenance windows.
-
-Please don’t hesitate to reach out to the NetBox Labs Support Team if you have any questions. We’re happy to connect via call or email to assist you.
diff --git a/docs/netbox-assurance/getting-started.md b/docs/netbox-assurance/getting-started.md
deleted file mode 100644
index 348300c1..00000000
--- a/docs/netbox-assurance/getting-started.md
+++ /dev/null
@@ -1,234 +0,0 @@
----
-tags:
-  - cloud
-  - enterprise
-  - netbox
-  - assurance
-  - getting-started
-  - installation
-  - configuration
-versions:
-  cloud: "v1.10"
-  enterprise: "v1.10"
-status: "current"
-related_docs:
-  - "index.md"
-  - "using-the-ui.md"
-  - "../netbox-discovery/getting-started.md"
-  - "../netbox-extensions/diode/index.md"
-external_links:
-  - "https://netdev.chat/"
----
-
-# Getting Started with NetBox Assurance
-
-This guide will help you set up, configure, and start using NetBox Assurance to maintain accurate network documentation and proactive drift detection. Follow these steps to go from installation to your first operational workflow.
-
-## Prerequisites
-
-Before enabling NetBox Assurance, ensure you have:
-
-### **Technical Requirements**
-- NetBox Enterprise 1.10+ or NetBox Cloud (coming soon) with Assurance add-on
-- Active NetBox Assurance license
-- Network connectivity for data ingestion sources
-
-### **Data Sources**
-To maximize value from NetBox Assurance, you'll need at least one data source:
-
-- **[NetBox Discovery](../netbox-discovery/getting-started.md)** - Recommended for automated network discovery
-- **Controller integrations** - For centralized network management platforms
-- **Custom integrations** - Using the [Diode SDK](../netbox-extensions/diode/index.md)
-
-### **Team Preparation**
-- Identify team members who will manage deviations
-- Define your drift tolerance and remediation policies
-- Plan your initial network segment for testing
-
-## Installation and Setup
-
-### **NetBox Enterprise**
-NetBox Assurance is available as an **optional component** of NetBox Enterprise. During installation, your license file determines whether Assurance is enabled.
-
-**Installation Steps:**
-1. Verify your license includes NetBox Assurance entitlement
-2. During NetBox Enterprise installation, Assurance services are automatically deployed if licensed
-3. The NetBox Assurance UI and Diode data plugins are installed automatically
-4. Access the Assurance menu in your NetBox interface to confirm installation
-
-### **NetBox Cloud**
-NetBox Assurance will be available as an **optional add-on** for NetBox Cloud in a future release.
-
-**Coming Soon:**
-NetBox Assurance for NetBox Cloud is currently in development. When available, it will feature:
-1. Seamless integration as an optional add-on
-2. Automatic provisioning and setup
-3. Built-in UI and Diode data plugins
-4. No additional configuration required
-
-Stay tuned for availability updates.
-
-### **Verification**
-After installation, verify NetBox Assurance is working:
-1. Log into your NetBox instance
-2. Look for the **Assurance** menu in the sidebar
-3. Navigate to **Assurance > Deviations** to access the main interface
-4. Confirm you can see the deviation management interface
-
-## Initial Configuration
-
-### **Data Source Setup**
-Choose and configure your primary data source:
-
-#### **Option 1: NetBox Discovery (Recommended)**
-1. Follow the [NetBox Discovery setup guide](../netbox-discovery/getting-started.md)
-2. Configure discovery agents for your network segments
-3. Set up automated discovery schedules
-4. Verify data is flowing into NetBox
-
-#### **Option 2: Controller Integrations**
-1. Configure your network controllers (VMware vCenter, Juniper Mist, etc.)
-2. Set up API access and credentials
-3. Configure data collection schedules
-4. Test connectivity and data flow
-
-#### **Option 3: Custom Diode Integration**
-1. Review the [Diode integration documentation](../netbox-extensions/diode/index.md)
-2. Develop custom integrations using Python or Go SDKs
-3. Configure data ingestion pipelines
-4. Test data flow and validation
-
-## Your First Workflow
-
-### **Phase 1: Initial Data Ingestion**
-Start with a small, well-understood network segment:
-
-1. **Select a test segment**: Choose 10-20 devices you know well
-2. **Configure data source**: Set up discovery or integration for this segment
-3. **Initial ingestion**: Run your first data collection
-4. **Review results**: Check that devices appear correctly in NetBox
-
-### **Phase 2: Understanding Deviations**
-Learn how NetBox Assurance detects and presents drift:
-
-1. **Access deviations**: Navigate to **Assurance > Active Deviations**
-2. **Review first deviations**: Examine what Assurance detected
-3. **Understand the interface**: Familiarize yourself with the [interface documentation](using-the-ui.md)
-4. **Analyze changes**: Click on individual deviations to see detailed change analysis
-
-### **Phase 3: Processing Your First Deviations**
-Practice the remediation workflow:
-
-1. **Triage deviations**: Determine which require action
-2. **Apply safe changes**: Start with obvious corrections (e.g., missing devices)
-3. **Ignore acceptable drift**: Mark intentional differences as ignored
-4. **Document decisions**: Use NetBox's change logging for audit trails
-
-### **Phase 4: Operational Integration**
-Establish ongoing processes:
-
-1. **Daily review schedule**: Set up regular deviation review sessions
-2. **Team workflows**: Define roles and responsibilities for deviation management
-3. **Escalation procedures**: Create processes for complex or critical deviations
-4. **Expand coverage**: Gradually add more network segments
-
-## Common Implementation Patterns
-
-### **Day 1: Initial NetBox Population**
-Use NetBox Assurance to control the initial population of your NetBox instance:
-
-**Workflow:**
-1. Configure data sources for comprehensive network discovery
-2. Review all discovered devices before accepting into NetBox
-3. Use deviations to validate data quality and completeness
-4. Establish baseline documentation with confidence
-
-**Benefits:**
-- Controlled onboarding with review and approval workflows
-- Data quality validation before information becomes your source of truth
-- Faster time to value with confidence in documentation accuracy
-
-### **Day 1.5: Improving Network Management Maturity**
-Gradually improve your network documentation while maintaining operations:
-
-**Workflow:**
-1. Focus on high-priority network segments first
-2. Use drift patterns to identify process improvement opportunities
-3. Implement automation based on consistent deviation types
-4. Build foundation for advanced network automation
-
-**Benefits:**
-- Gradual documentation improvement without disrupting daily operations
-- Process improvement insights based on drift detection patterns
-- Foundation building for network automation initiatives
-
-### **Day 2: Operational Excellence**
-Maintain high-quality network documentation for mature operations:
-
-**Workflow:**
-1. Monitor for unauthorized or unexpected configuration changes
-2. Validate network automation results automatically
-3. Integrate with change management processes
-4. Use for compliance reporting and auditing
-
-**Benefits:**
-- Proactive drift detection for mature network operations teams
-- Immediate response to unauthorized or unexpected configuration changes
-- Continuous validation of network automation results and change management processes
-
-## Integration with Existing Workflows
-
-### **Change Management Integration**
-- **Pre-change validation**: Verify current state before making changes
-- **Post-change verification**: Confirm changes were applied correctly
-- **Rollback detection**: Identify when changes need to be reverted
-
-### **Incident Response Enhancement**
-- **Faster troubleshooting**: Access to accurate, real-time network state
-- **Root cause analysis**: Historical tracking of configuration changes
-- **Documentation trust**: Confidence in network documentation during incidents
-
-### **Compliance and Auditing**
-- **Automated compliance checking**: Continuous validation against standards
-- **Audit trail maintenance**: Historical record of all network changes
-- **Reporting capabilities**: Generate compliance reports and metrics
-
-## Troubleshooting Common Issues
-
-### **No Deviations Appearing**
-1. Verify data sources are configured and running
-2. Check network connectivity between sources and NetBox
-3. Confirm permissions are set correctly
-4. Review logs for ingestion errors
-
-### **Too Many False Positives**
-1. Review your tolerance settings for acceptable drift
-2. Use the ignore function for known acceptable differences
-3. Refine your data source configurations
-4. Consider adjusting detection sensitivity
-
-### **Performance Issues**
-1. Use date range filters to limit large datasets
-2. Process deviations in smaller batches
-3. Schedule data ingestion during off-peak hours
-4. Contact support for optimization guidance
-
-## Next Steps
-
-Once you've completed your initial setup and first workflow:
-
-1. **[Master the Interface](using-the-ui.md)** - Learn advanced features and workflows
-2. **[Expand NetBox Discovery](../netbox-discovery/getting-started.md)** - Add more network segments and device types
-3. **[Explore Diode Integration](../netbox-extensions/diode/index.md)** - Build custom integrations for specialized needs
-4. **Scale Operations** - Expand to full network coverage and integrate with enterprise workflows
-
-## Support and Resources
-
-- **Interface Documentation**: Detailed guide to [using the NetBox Assurance interface](using-the-ui.md)
-- **NetBox Discovery**: Complete [setup and configuration guide](../netbox-discovery/getting-started.md)
-- **Diode Integration**: Advanced [API and SDK documentation](../netbox-extensions/diode/index.md)
-- **Community Support**: Connect with the community on [Slack](https://netdev.chat/) in the `#netbox` channel
-
----
-
-**NetBox Assurance** transforms network operations by ensuring your documentation stays current and accurate. Follow this guide to establish a solid foundation for maintaining network documentation integrity and enabling confident network automation. 
\ No newline at end of file
diff --git a/docs/netbox-assurance/images/active-deviations.png b/docs/netbox-assurance/images/active-deviations.png
deleted file mode 100644
index ee36f70a..00000000
Binary files a/docs/netbox-assurance/images/active-deviations.png and /dev/null differ
diff --git a/docs/netbox-assurance/images/deviation-change-set.png b/docs/netbox-assurance/images/deviation-change-set.png
deleted file mode 100644
index cb4b18bd..00000000
Binary files a/docs/netbox-assurance/images/deviation-change-set.png and /dev/null differ
diff --git a/docs/netbox-assurance/images/deviation-details.png b/docs/netbox-assurance/images/deviation-details.png
deleted file mode 100644
index f9c43d38..00000000
Binary files a/docs/netbox-assurance/images/deviation-details.png and /dev/null differ
diff --git a/docs/netbox-assurance/images/deviation-types.png b/docs/netbox-assurance/images/deviation-types.png
deleted file mode 100644
index cd71549f..00000000
Binary files a/docs/netbox-assurance/images/deviation-types.png and /dev/null differ
diff --git a/docs/netbox-assurance/index.md b/docs/netbox-assurance/index.md
deleted file mode 100644
index 77b6ee5f..00000000
--- a/docs/netbox-assurance/index.md
+++ /dev/null
@@ -1,141 +0,0 @@
----
-tags:
-  - cloud
-  - enterprise
-  - assurance
-  - operations
-  - automation
-  - networking
-  - integration
-  - getting-started
-versions:
-  netbox_cloud: "v1.10"
-  netbox_enterprise: "v1.10"
-status: "current"
-related_docs:
-  - "getting-started.md"
-  - "using-the-ui.md"
-  - "../netbox-discovery/index.md"
-external_links:
-  - "https://netboxlabs.com/docs/console/netbox-assurance/"
----
-
-# NetBox Assurance
-
-NetBox Assurance automatically detects operational drift between your intended network design (documented in NetBox) and your actual network infrastructure. It continuously monitors network and infrastructure, comparing your intended design against real-world infrastructure to uncover discrepancies and provide proactive remediation capabilities.
-
-By ensuring your NetBox documentation stays current and accurate, Assurance enables faster incident resolution, better compliance, and the confidence to move quickly with reliable network automation.
-
-## What Makes NetBox Assurance Unique
-
-Unlike traditional monitoring tools that focus on performance metrics, NetBox Assurance focuses on **configuration accuracy and documentation integrity**. It bridges the gap between what you've documented in NetBox and what actually exists in your network.
-
-### **Automated Operational Drift Detection**
-- **Continuous comparison** of ingested network data against NetBox documentation
-- **Real-time detection** of configuration changes and undocumented infrastructure
-- **Intelligent analysis** that identifies meaningful deviations requiring attention
-- **Historical tracking** of changes and drift patterns over time
-
-### **Proactive Issue Resolution**
-- **Early warning system** for configuration drift before it becomes a problem
-- **Actionable insights** with specific remediation recommendations
-- **Workflow integration** for team collaboration and change management
-- **Reduced Mean Time to Repair (MTTR)** with trustworthy documentation during incidents
-
-## Key Features
-
-- **Instant Drift Detection**: Continuously compare your intended design against real-world infrastructure to uncover discrepancies
-- **Proactive Issue Resolution**: Act on real-time data to remediate drift before it escalates, reducing downtime and troubleshooting delays
-- **Automated Documentation**: Automatically keep your NetBox documentation aligned with operational reality, ensuring a consistent source of truth
-- **Real-time Monitoring**: Provides real-time insights into network configuration changes
-- **Integration Ready**: Works seamlessly with existing network and infrastructure operations investments
-- **Deviation Management**: Comprehensive workflow for reviewing, analyzing, and resolving detected drift
-- **Data Quality Assurance**: Validates the accuracy and completeness of network documentation
-
-## How NetBox Assurance Works
-
-NetBox Assurance operates through a three-stage process that transforms raw network data into actionable insights:
-
-### **1. Data Ingestion Pipeline**
-Network data flows into NetBox Enterprise through multiple sources:
-- **[NetBox Discovery Agents](../netbox-discovery/index.md)** - Automated network and device discovery
-- **Controller Integrations** - VMware vCenter, Juniper Mist, Cisco Catalyst Center, etc.
-- **[Diode API](../netbox-extensions/diode/index.md)** - Custom integrations using Python or Go SDKs
-
-### **2. Intelligent Analysis**
-Assurance automatically compares ingested data against existing NetBox documentation to identify:
-- **New devices** discovered but not documented in NetBox
-- **Configuration changes** that deviate from intended state
-- **Missing infrastructure** that exists in documentation but not in reality
-- **Data quality issues** that require investigation or cleanup
-
-### **3. Deviation Workflow**
-When operational drift is detected, Assurance creates **deviations** that provide:
-- **Detailed change analysis** showing exactly what differs
-- **Proposed remediation actions** to resolve the drift
-- **Historical context** for understanding change patterns
-- **Collaboration tools** for team review and approval
-
-## Common Use Cases
-
-NetBox Assurance supports network teams across different operational maturity levels:
-
-### **Day 1: Initial NetBox Population**
-- **Controlled onboarding** of network data into NetBox with review and approval workflows
-- **Data quality validation** before information becomes part of your source of truth
-- **Faster time to value** with confidence in documentation accuracy
-
-### **Day 1.5: Network Management Maturity**
-- **Gradual documentation improvement** while maintaining daily operations
-- **Process improvement insights** based on drift detection patterns
-- **Foundation building** for network automation initiatives
-
-### **Day 2: Operational Excellence**
-- **Proactive drift detection** for mature network operations teams
-- **Immediate response** to unauthorized or unexpected configuration changes
-- **Continuous validation** of network automation results and change management processes
-
-### **Specific Applications**
-- **Network Operations**: Maintain network configurations consistent with documented standards
-- **Infrastructure Management**: Ensure infrastructure remains aligned with planned designs  
-- **Compliance and Security**: Support compliance efforts by detecting unauthorized changes and configuration drift
-- **Incident Prevention**: Identify and address deviations proactively to prevent major disruptions
-- **Change Management**: Track and validate configuration changes across your infrastructure
-
-## Integration with NetBox Discovery
-
-NetBox Assurance and [NetBox Discovery](../netbox-discovery/index.md) work together to provide complete network visibility and control:
-
-- **Discovery provides the data** - Automated collection from network devices and controllers
-- **Assurance provides the intelligence** - Analysis, drift detection, and remediation workflows
-- **Combined value** - Complete visibility and control over network documentation accuracy
-
-This integration enables teams to not only discover their network infrastructure automatically but also maintain its accuracy over time.
-
-## Availability
-
-### **NetBox Enterprise**
-NetBox Assurance is available as an optional component of NetBox Enterprise. Your license file determines whether Assurance services are enabled during installation.
-
-### **NetBox Cloud**
-NetBox Assurance will be available as an optional add-on for NetBox Cloud in a future release. Stay tuned for availability updates.
-
-### **NetBox Community Edition**
-NetBox Assurance is not available for NetBox Community Edition. However, the underlying [Diode project](../netbox-extensions/diode/index.md) provides data ingestion capabilities that work with NetBox Discovery agents.
-
-## Getting Started
-
-Ready to start using NetBox Assurance? Follow these steps:
-
-1. **[Get Started](getting-started.md)** - Complete setup and configuration guide with prerequisites, installation steps, and initial workflow
-2. **[Using the Interface](using-the-ui.md)** - Detailed guide to navigating and using the NetBox Assurance interface
-3. **[NetBox Discovery](../netbox-discovery/getting-started.md)** - Set up automated network discovery for data ingestion
-
-## Support and Resources
-
-- **Community Support**: Connect with the community on [Slack](https://netdev.chat/) in the `#netbox` channel
-- **Integration Guides**: Learn about [Diode Integration](../netbox-extensions/diode/index.md) for advanced API and SDK usage
-
----
-
-With **NetBox Assurance**, teams can detect, report, and resolve network deviations in real time, ensuring a consistent and reliable network environment through continuous validation and corrective actions. Transform your network operations by ensuring your documentation stays current and accurate, enabling faster incident resolution, better compliance, and the confidence to move quickly with reliable network automation.
\ No newline at end of file
diff --git a/docs/netbox-assurance/using-the-ui.md b/docs/netbox-assurance/using-the-ui.md
deleted file mode 100644
index 38e2cc57..00000000
--- a/docs/netbox-assurance/using-the-ui.md
+++ /dev/null
@@ -1,196 +0,0 @@
----
-tags:
-  - cloud
-  - enterprise
-  - assurance
-  - ui
-  - interface
-versions:
-  cloud: "v1.10"
-  enterprise: "v1.10"
-status: "current"
-related_docs:
-  - "index.md"
-  - "getting-started.md"
-external_links:
-  - "https://netdev.chat/"
----
-
-# Using the NetBox Assurance UI
-
-The NetBox Assurance plugin provides a comprehensive web interface within NetBox for monitoring network drift, viewing deviation reports, and managing remediation workflows. This guide covers the interface features, navigation, and operational workflows for day-to-day use of NetBox Assurance.
-
-> **Prerequisites**: Before using this guide, complete the [Getting Started](getting-started.md) setup to ensure NetBox Assurance is properly configured and receiving data.
-
-## Navigation
-
-Once the NetBox Assurance plugin is installed, you'll find the **Assurance** menu in the NetBox sidebar with the following sections:
-
-### Deviation Types
-- **Deviation Types**: Browse and manage different types of network deviations that can be detected
-
-![Deviation Types](images/deviation-types.png)
-
-### Deviations
-- **Active Deviations**: View currently unresolved configuration deviations
-- **All Deviations**: Complete list of all detected deviations (active and resolved)
-- **Archived Deviations**: Historical view of resolved or archived deviations
-
-## Main Deviation Views
-
-### All Deviations List
-
-The main deviations page provides a comprehensive overview of all detected network drift:
-
-**Key Features:**
-- **Visual Charts**: Timeline charts showing deviation trends and patterns
-- **Filterable Table**: Search and filter deviations by various criteria
-- **Export Options**: Export deviation data in multiple formats
-- **Bulk Actions**: Apply actions to multiple deviations simultaneously
-
-**Available Filters:**
-- Date range selection for focused analysis
-- Deviation type filtering
-- Status-based filtering
-- Source-based filtering
-
-### Active Deviations
-
-Shows only unresolved deviations that require attention:
-- Real-time view of current network drift
-- Prioritized by detection date
-- Immediate action items for network operations teams
-
-![Active Deviations](images/active-deviations.png)
-
-### Archived Deviations
-
-Historical view of resolved deviations:
-- Track remediation history
-- Analyze patterns in network drift
-- Compliance reporting and auditing
-
-## Deviation Detail View
-
-When you click on a specific deviation, you'll see detailed information:
-
-### Overview Tab
-**Deviation Information:**
-- Deviation name and identifier
-- Data type affected
-- Number of changes detected
-- Current status with visual indicators
-- Branch information (if using NetBox branching)
-- Source system and timestamp
-- Last update information
-
-**Ingested Data Panel:**
-- Raw data that was ingested from the network
-- Formatted JSON view for technical analysis
-
-**Error Details** (if applicable):
-- Error messages for failed operations
-- Detailed error information for troubleshooting
-
-![Deviation Details](images/deviation-details.png)
-
-### Changes Tab
-- Detailed view of specific configuration changes
-- Object-by-object comparison
-- Before/after state visualization
-
-![Deviation Change Set](images/deviation-change-set.png)
-
-## Bulk Operations
-
-The deviation list supports several bulk operations:
-
-### Rediff Selected
-- Re-analyze selected deviations
-- Useful when network state may have changed
-- Updates deviation status based on current conditions
-
-### Ignore Selected
-- Mark deviations as acceptable
-- Removes them from active monitoring
-- Useful for planned configuration differences
-
-### Apply Selected
-- Automatically remediate selected deviations
-- Applies corrections based on predefined rules
-- Updates NetBox or network devices as configured
-
-## Data Visualization
-
-### Timeline Charts
-- Visual representation of deviation trends over time
-- Stacked bar charts showing deviation types
-- Customizable date ranges for analysis
-- Color-coded by deviation status
-
-### Status Indicators
-Deviations are marked with clear visual indicators:
-- **Active**: Requires attention
-- **Applied**: Successfully remediated
-- **Failed**: Remediation attempt failed
-- **Ignored**: Marked as acceptable
-
-## Export and Reporting
-
-### Export Options
-- **Current View**: Export filtered results
-- **All Data**: Complete deviation dataset
-- **Custom Templates**: Use predefined export formats
-
-### Supported Formats
-- Table format for immediate viewing
-- Structured data formats for integration
-- Custom export templates for specific reporting needs
-
-## Integration Features
-
-### NetBox Integration
-- Seamless integration with NetBox's existing interface
-- Respects NetBox's user permissions and roles
-- Consistent styling and user experience
-- Integration with NetBox's change logging system
-
-### Branching Support
-- Compatible with NetBox branching features
-- Branch-specific deviation tracking
-- Branch information displayed in deviation details
-
-## Workflow Best Practices
-
-### Daily Operations
-1. **Review Active Deviations**: Start with the active deviations view
-2. **Analyze Trends**: Check timeline charts for patterns
-3. **Prioritize Actions**: Focus on critical deviations first
-4. **Bulk Processing**: Use bulk actions for similar deviations
-
-### Investigation Process
-1. **Drill Down**: Click on deviations for detailed analysis
-2. **Review Changes**: Examine specific configuration differences
-3. **Check Source Data**: Verify ingested data accuracy
-4. **Determine Action**: Decide between applying, ignoring, or escalating
-
-### Remediation Workflow
-1. **Select Appropriate Action**: Choose between update NetBox or correct device
-2. **Use Bulk Operations**: Process similar deviations together
-3. **Monitor Results**: Verify successful remediation
-4. **Document Decisions**: Use NetBox's change logging for audit trails
-
-## Troubleshooting
-
-### Common Issues
-- **Failed Deviations**: Check error details for specific failure reasons
-- **Missing Data**: Verify source system connectivity
-
-### Performance Considerations
-- Use date range filters to limit large datasets
-- Export data in smaller chunks for better performance
-- Leverage bulk operations for efficiency
-
----
-
-The NetBox Assurance UI provides a powerful platform for managing network drift detection and remediation, helping maintain consistency between your documented network design and operational reality through an intuitive web interface.
\ No newline at end of file
diff --git a/docs/netbox-cloud/migrating-to-netbox-cloud.md b/docs/netbox-cloud/migrating-to-netbox-cloud.md
deleted file mode 100644
index e25dc048..00000000
--- a/docs/netbox-cloud/migrating-to-netbox-cloud.md
+++ /dev/null
@@ -1,66 +0,0 @@
----
-tags:
-  - cloud
-  - migration
-  - getting-started
-  - database
-versions:
-  netbox_cloud: "v1.10"
-status: "current"
----
-
-# Migrating to NetBox Cloud
-
-Migrating from an on-premises NetBox open source instance to a NetBox Labs NetBox Cloud environment is a straightforward
-process. Since NetBox Cloud is built using the same open source software you're already using, most imports can be
-completed quickly for a timely cutover. This checklist will walk you through the steps, highlighting mandatory and optional
-points in the process.
-
-### 1 - Record your current NetBox version
-
-Navigate to your NetBox portal login page to view the version of NetBox you are running. You can also find this information
-within the application. This helps the NetBox team understand which upgrade path is required for your data.
-
-### 2 - Export your existing NetBox database
-
-Use the following command to export your existing NetBox database:
-
-```shell
-pg_dump --no-owner --no-privileges --username [netbox] --password --host [localhost] [netbox] > [netbox.sql] 
-```
-
-> **Warning**
-> Inform the NetBox Labs team if you used any additional flags for the pg_dump command, or if you exported the data to a
-different format.
-
-### 3 - (Optional) Archive your /media directory
-
-Optionally, if you are storing images inside NetBox, use the command below to archive your media directory. Note that the
-example below shows the default file path. Update the path if you have changed the location of these files.
-
-```shell
-tar -czf netbox_media.tar.gz /opt/netbox/netbox/media/
-```
-
-### 4 - (Optional) Archive your /scripts directory
-
-Optionally, if you have uploaded custom scripts to NetBox, use the command below to archive your scripts directory. Note that
-the example below shows the default file path. Update the path if you have changed the location of these files.
-
-```shell
-tar -czf netbox_scripts.tar.gz /opt/netbox/netbox/scripts/
-```
-
-### 5 - (Optional) Archive your /reports directory
-
-Optionally, if you have uploaded custom reports to NetBox, use the command below to archive your reports directory. Note
-that the example below shows the default file path. Update the path if you have changed the location of these files.
-
-```shell
-tar -czf netbox_scripts.tar.gz /opt/netbox/netbox/reports/
-```
-
-### 6 - Upload the files to a shared location
-
-Upload the files created in the steps above to a shareable location such as FTP, Dropbox, Box, or Google Drive. If necessary, the
-NetBox Labs team can create a secure, dedicated location for you to use.
diff --git a/docs/netbox-discovery/getting-started.md b/docs/netbox-discovery/getting-started.md
deleted file mode 100644
index ddbec586..00000000
--- a/docs/netbox-discovery/getting-started.md
+++ /dev/null
@@ -1,504 +0,0 @@
----
-tags:
-  - community
-  - cloud
-  - enterprise
-  - netbox
-  - discovery
-  - getting-started
-  - installation
-  - configuration
-versions:
-  cloud: "v1.10"
-  enterprise: "v1.10"
-  community: "v1.10"
-status: "current"
-related_docs:
-  - "index.md"
-  - "../netbox-assurance/getting-started.md"
-  - "../netbox-extensions/diode/index.md"
-external_links:
-  - "https://github.com/netboxlabs/orb-agent"
-  - "https://netdev.chat/"
----
-
-# Get Started with NetBox Discovery
-
-This guide will help you set up and start using NetBox Discovery to ingest network data into NetBox. The setup process varies depending on your NetBox deployment type.
-
-## Choose Your Deployment Type
-
-### NetBox Cloud
-If you're using **NetBox Cloud**, NetBox Discovery is managed for you:
-- ✅ **Diode server is managed** by NetBox Labs
-- ✅ **Plugin enabled** by Customer Support upon request
-- 🔧 **You configure**: Client credentials and discovery agents
-
-### NetBox Enterprise  
-If you're using **NetBox Enterprise**, NetBox Discovery comes pre-configured:
-- ✅ **Diode server is built-in** to your Enterprise deployment
-- ✅ **Plugin enabled by default** if you have the Discovery entitlement
-- 🔧 **You configure**: Client credentials and discovery agents
-
-### NetBox Community
-If you're using **NetBox Community**, you'll need to set up the complete infrastructure:
-- 🔧 **You deploy**: Diode server, plugin installation, and discovery agents
-- 📖 **Full setup guide**: [Community Setup Instructions](#community-setup-instructions)
-
----
-
-## NetBox Cloud Setup
-
-### Prerequisites
-- Active NetBox Cloud subscription with Discovery entitlement
-- Docker installed on agent host systems
-- Network connectivity from agent hosts to your NetBox Cloud instance
-
-### Step 1: Enable NetBox Discovery
-Contact Customer Support to enable NetBox Discovery for your NetBox Cloud instance. Once enabled, you'll see the **Diode** section in your NetBox navigation menu.
-
-### Step 2: Generate Client Credentials
-1. Log into your NetBox Cloud instance
-2. Navigate to **Diode → Client Credentials**
-3. Click **+ Add a Credential**
-4. Enter a descriptive name (e.g., "Production Discovery Agent")
-5. Click **Create**
-6. **Important**: Copy and securely store the Client ID and Client Secret
-
-### Step 3: Deploy Discovery Agents
-Deploy agents on your network infrastructure to discover devices:
-
-```bash
-# Export your credentials
-export DIODE_CLIENT_ID="your-client-id"
-export DIODE_CLIENT_SECRET="your-client-secret"
-
-# Create agent configuration
-cat > agent.yaml << EOF
-orb:
-  config_manager:
-    active: local
-  backends:
-    network_discovery:
-    common:
-      diode:
-        target: https://your-instance.netboxcloud.com/diode
-        client_id: ${DIODE_CLIENT_ID}
-        client_secret: ${DIODE_CLIENT_SECRET}
-        agent_name: cloud_agent_01
-  policies:
-    network_discovery:
-      network_scan:
-        config:
-          schedule: "0 */4 * * *"  # Every 4 hours
-          timeout: 5
-        scope:
-          targets: 
-            - "192.168.1.0/24"
-            - "10.0.0.0/16"
-EOF
-
-# Run the discovery agent
-docker run --net=host \
-  -v $(pwd):/opt/orb/ \
-  -e DIODE_CLIENT_ID \
-  -e DIODE_CLIENT_SECRET \
-  netboxlabs/orb-agent:latest run -c /opt/orb/agent.yaml
-```
-
----
-
-## NetBox Enterprise Setup
-
-### Prerequisites
-- NetBox Enterprise deployment with Discovery entitlement
-- Docker installed on agent host systems
-- Network connectivity from agent hosts to your NetBox Enterprise instance
-
-### Step 1: Verify Plugin Status
-The Diode plugin is enabled by default in NetBox Enterprise if you have the Discovery entitlement. Verify by checking for the **Diode** section in your NetBox navigation menu.
-
-### Step 2: Generate Client Credentials
-1. Log into your NetBox Enterprise instance
-2. Navigate to **Diode → Client Credentials**
-3. Click **+ Add a Credential**
-4. Enter a descriptive name (e.g., "Datacenter East Agent")
-5. Click **Create**
-6. **Important**: Copy and securely store the Client ID and Client Secret
-
-### Step 3: Deploy Discovery Agents
-Deploy agents across your network infrastructure:
-
-```bash
-# Export your credentials
-export DIODE_CLIENT_ID="your-client-id"
-export DIODE_CLIENT_SECRET="your-client-secret"
-
-# Create agent configuration
-cat > agent.yaml << EOF
-orb:
-  config_manager:
-    active: local
-  backends:
-    network_discovery:
-    device_discovery:
-    common:
-      diode:
-        target: https://your-instance.netboxcloud.com/diode
-        client_id: ${DIODE_CLIENT_ID}
-        client_secret: ${DIODE_CLIENT_SECRET}
-        agent_name: enterprise_agent_01
-  policies:
-    network_discovery:
-      headquarters:
-        config:
-          schedule: "0 */2 * * *"  # Every 2 hours
-          timeout: 5
-        scope:
-          targets: 
-            - "192.168.0.0/16"
-            - "10.0.0.0/8"
-    device_discovery:
-      cisco_devices:
-        config:
-          schedule: "0 */6 * * *"  # Every 6 hours
-          defaults:
-            site: Headquarters
-        scope:
-          - driver: ios
-            hostname: 192.168.1.1
-            username: ${DEVICE_USERNAME}
-            password: ${DEVICE_PASSWORD}
-EOF
-
-# Run the discovery agent
-docker run --net=host \
-  -v $(pwd):/opt/orb/ \
-  -e DIODE_CLIENT_ID \
-  -e DIODE_CLIENT_SECRET \
-  -e DEVICE_USERNAME \
-  -e DEVICE_PASSWORD \
-  netboxlabs/orb-agent:latest run -c /opt/orb/agent.yaml
-```
-
----
-
-## Configuration Examples
-
-### NetBox Cloud - Basic Network Discovery
-```yaml
-orb:
-  config_manager:
-    active: local
-  backends:
-    network_discovery:
-    common:
-      diode:
-        target: https://your-instance.netboxcloud.com/diode
-        client_id: ${DIODE_CLIENT_ID}
-        client_secret: ${DIODE_CLIENT_SECRET}
-        agent_name: cloud_network_agent
-  policies:
-    network_discovery:
-      office_networks:
-        config:
-          schedule: "0 */4 * * *"
-          timeout: 5
-        scope:
-          targets: 
-            - "192.168.1.0/24"
-            - "10.1.0.0/16"
-```
-
-### NetBox Enterprise - Multi-Site Discovery
-```yaml
-orb:
-  config_manager:
-    active: local
-  backends:
-    network_discovery:
-    device_discovery:
-    common:
-      diode:
-        target: https://your-instance.netboxcloud.com/diode
-        client_id: ${DIODE_CLIENT_ID}
-        client_secret: ${DIODE_CLIENT_SECRET}
-        agent_name: multi_site_agent
-  policies:
-    network_discovery:
-      headquarters:
-        config:
-          schedule: "0 */4 * * *"
-          timeout: 5
-        scope:
-          targets: 
-            - "192.168.0.0/16"
-            - "10.0.0.0/8"
-      remote_offices:
-        config:
-          schedule: "0 */12 * * *"
-          timeout: 10
-        scope:
-          targets:
-            - "172.16.0.0/16"
-            - "172.17.0.0/16"
-    device_discovery:
-      core_switches:
-        config:
-          schedule: "0 */8 * * *"
-          defaults:
-            site: Headquarters
-        scope:
-          - driver: ios
-            hostname: 192.168.1.10
-            username: ${SWITCH_USERNAME}
-            password: ${SWITCH_PASSWORD}
-          - driver: junos
-            hostname: 192.168.1.11
-            username: ${SWITCH_USERNAME}
-            password: ${SWITCH_PASSWORD}
-```
-
-### NetBox Enterprise - Device Discovery Focus
-```yaml
-orb:
-  config_manager:
-    active: local
-  backends:
-    device_discovery:
-    common:
-      diode:
-        target: https://your-instance.netboxcloud.com/diode
-        client_id: ${DIODE_CLIENT_ID}
-        client_secret: ${DIODE_CLIENT_SECRET}
-        agent_name: device_discovery_agent
-  policies:
-    device_discovery:
-      cisco_infrastructure:
-        config:
-          schedule: "0 */6 * * *"
-          defaults:
-            site: Data Center 1
-            tenant: Infrastructure
-        scope:
-          - driver: ios
-            hostname: core-sw-01.company.local
-            username: ${CISCO_USERNAME}
-            password: ${CISCO_PASSWORD}
-          - driver: ios
-            hostname: core-sw-02.company.local
-            username: ${CISCO_USERNAME}
-            password: ${CISCO_PASSWORD}
-      juniper_edge:
-        config:
-          schedule: "0 */12 * * *"
-          defaults:
-            site: Edge Locations
-        scope:
-          - driver: junos
-            hostname: edge-01.company.local
-            username: ${JUNIPER_USERNAME}
-            password: ${JUNIPER_PASSWORD}
-```
-
----
-
-## Community Setup Instructions
-
-If you're using NetBox Community, you'll need to set up the complete NetBox Discovery infrastructure:
-
-### Prerequisites
-- NetBox Community version 4.2.3 or later
-- Docker version 27.0.3 or newer
-- bash 4.x or newer
-- jq
-- Sufficient permissions to run Docker commands
-
-### Step 1: Deploy Diode Server
-
-Create a working directory and deploy the Diode server:
-
-```bash
-# Create working directory
-mkdir -p /opt/diode
-cd /opt/diode
-
-# Download quickstart script
-curl -sSfLo quickstart.sh https://raw.githubusercontent.com/netboxlabs/diode/release/diode-server/docker/scripts/quickstart.sh
-chmod +x quickstart.sh
-
-# Run setup script
-./quickstart.sh https://your-netbox-server.com
-
-# Start Diode server
-docker compose up -d
-
-# Verify services are running
-docker compose ps
-```
-
-### Step 2: Install Diode Plugin
-
-Install and configure the Diode plugin in your NetBox Community instance:
-
-```bash
-# Activate NetBox virtual environment
-cd /opt/netbox
-source venv/bin/activate
-
-# Install plugin
-pip install netboxlabs-diode-netbox-plugin
-
-# Add to configuration.py
-cat >> /opt/netbox/netbox/netbox/configuration.py << EOF
-
-# Diode Plugin Configuration
-PLUGINS.append("netbox_diode_plugin")
-
-PLUGINS_CONFIG["netbox_diode_plugin"] = {
-    "diode_target_override": "grpc://localhost:8080/diode",
-    "diode_username": "diode",
-    "netbox_to_diode_client_secret": "your-secret-from-quickstart"
-}
-EOF
-
-# Apply migrations
-cd /opt/netbox/netbox
-./manage.py migrate netbox_diode_plugin
-
-# Restart NetBox
-sudo systemctl restart netbox netbox-rq
-```
-
-### Step 3: Generate Client Credentials and Deploy Agents
-
-Follow the same credential generation and agent deployment steps as Enterprise, but use your self-hosted Diode server URL:
-
-```yaml
-orb:
-  config_manager:
-    active: local
-  backends:
-    network_discovery:
-    common:
-      diode:
-        target: grpc://your-diode-server.com:8080/diode
-        client_id: ${DIODE_CLIENT_ID}
-        client_secret: ${DIODE_CLIENT_SECRET}
-        agent_name: community_agent
-  policies:
-    network_discovery:
-      home_network:
-        config:
-          schedule: "0 */6 * * *"
-          timeout: 5
-        scope:
-          targets: 
-            - "192.168.1.0/24"
-```
-
----
-
-## Troubleshooting
-
-### Cloud & Enterprise Common Issues
-
-1. **Authentication Issues**
-   - Verify client credentials are correct
-   - Check that Discovery entitlement is active
-   - Ensure credentials haven't expired
-
-2. **Agent Connection Issues**
-   - Verify network connectivity to your NetBox instance
-   - Check firewall rules for HTTPS traffic
-   - Validate the target URL in agent configuration
-
-3. **Discovery Issues**
-   - Verify agent has network access to target devices
-   - Check device credentials and permissions
-   - Review agent logs for specific error messages
-
-### Cloud-Specific Issues
-
-1. **Plugin Not Available**
-   - Contact Customer Support to enable Discovery
-   - Verify your subscription includes Discovery entitlement
-
-2. **Target URL Issues**
-   - Use format: `https://your-instance.netboxcloud.com/diode`
-   - Ensure no trailing slashes in URL
-
-### Enterprise-Specific Issues
-
-1. **Plugin Not Enabled**
-   - Verify Discovery entitlement in your license
-   - Check with your NetBox Enterprise administrator
-   - Review NetBox Enterprise logs for plugin errors
-
-2. **Internal Network Access**
-   - Ensure agents can reach NetBox Enterprise instance
-   - Check internal DNS resolution
-   - Verify SSL certificates for internal domains
-
-### Agent Troubleshooting
-
-**Enable Debug Logging:**
-```bash
-docker run --net=host \
-  -v $(pwd):/opt/orb/ \
-  -e DIODE_CLIENT_ID \
-  -e DIODE_CLIENT_SECRET \
-  -e LOG_LEVEL=DEBUG \
-  netboxlabs/orb-agent:latest run -c /opt/orb/agent.yaml
-```
-
-**Common Log Messages:**
-- `"Connection established"` - Agent connected successfully
-- `"Discovery completed"` - Discovery cycle finished
-- `"Authentication failed"` - Check client credentials
-- `"Connection refused"` - Check target URL and network connectivity
-
----
-
-## Best Practices
-
-### Security
-- Store credentials as environment variables, never in configuration files
-- Use descriptive agent names for easier troubleshooting
-- Rotate client credentials regularly
-- Implement network segmentation for discovery traffic
-
-### Performance
-- Adjust discovery schedules based on network size and change frequency
-- Use appropriate timeout values for your network conditions
-- Deploy multiple agents for large networks
-- Monitor agent resource usage
-
-### Operations
-- Implement monitoring for agent health and connectivity
-- Set up alerting for discovery failures
-- Maintain documentation of agent deployments
-- Regular review of discovered data accuracy
-
----
-
-## Getting Help
-
-### Support Resources
-- **NetBox Cloud**: Contact Customer Support through your cloud portal
-- **NetBox Enterprise**: Contact your NetBox Labs support representative
-- **Community**: Join [NetDev Community Slack](https://netdev.chat/) #netbox channel
-
-### Documentation
-- [NetBox Discovery Agent Documentation](https://github.com/netboxlabs/orb-agent)
-- [Diode Documentation](../netbox-extensions/diode/index.md)
-- [NetBox Enterprise Documentation](../netbox-enterprise/nbe-overview.md)
-
-### Troubleshooting
-- [GitHub Issues](https://github.com/netboxlabs/orb-agent/issues) - Report bugs and feature requests
-- Agent logs: `docker logs <container-id>`
-- NetBox Diode plugin logs: Check the Ingestion Logs view in NetBox
-
----
-
-**Success!** You now have NetBox Discovery configured and running. Your agents will automatically discover and update network infrastructure data in NetBox based on your configured schedules. 
\ No newline at end of file
diff --git a/docs/netbox-discovery/images/discovery-assurance.png b/docs/netbox-discovery/images/discovery-assurance.png
deleted file mode 100644
index 365ea9bc..00000000
Binary files a/docs/netbox-discovery/images/discovery-assurance.png and /dev/null differ
diff --git a/docs/netbox-discovery/index.md b/docs/netbox-discovery/index.md
deleted file mode 100644
index c670defa..00000000
--- a/docs/netbox-discovery/index.md
+++ /dev/null
@@ -1,96 +0,0 @@
----
-tags:
-  - community
-  - cloud
-  - enterprise
-  - netbox
-  - discovery
-versions:
-  cloud: "v1.10"
-  enterprise: "v1.10"
-  community: "v1.10"
-status: "current"
-related_docs:
-  - "getting-started.md"
-  - "../netbox-assurance/index.md"
-  - "../netbox-extensions/diode/index.md"
-external_links:
-  - "https://github.com/netboxlabs/orb-agent"
-  - "https://netdev.chat/"
----
-
-# NetBox Discovery
-
-NetBox Discovery is an advanced network discovery and observability solution designed to simplify documenting your network and help detect network drift. It extends NetBox by providing automated network and device discovery capabilities through the orb-agent, a lightweight and scalable discovery component.
-
-## Enterprise Benefits
-
-NetBox Discovery enables enterprise teams to:
-
-- **Accelerate Network Documentation**: Automatically discover and populate your NetBox instance with accurate network topology and device information
-- **Ensure Compliance**: Continuously audit your network against documented standards and detect unauthorized changes
-- **Reduce Manual Effort**: Eliminate time-consuming manual data entry and reduce human error in network documentation
-- **Enable Automation**: Maintain an accurate source of truth that powers network automation workflows
-- **Detect Drift**: Identify when your network configuration deviates from intended designs
-
-## Getting Started
-
-Ready to start discovering your network? Follow our comprehensive getting started guide:
-
-**[Get Started with NetBox Discovery](getting-started.md)** - Complete setup and configuration guide
-
-### Quick Start Paths
-
-**For NetBox Enterprise Users:**
-- **[Enterprise Quick Start](getting-started.md#netbox-enterprise-setup)** - Get up and running quickly with your existing NetBox Enterprise deployment
-
-**For New Deployments:**
-- **[Complete Setup Guide](getting-started.md#choose-your-deployment-type)** - Full end-to-end installation and configuration
-
-## Enterprise Use Cases
-
-### **Network Asset Management**
-Automatically discover and maintain an accurate inventory of network devices, interfaces, and IP addresses across your enterprise infrastructure.
-
-**Ideal for**: Large enterprises, multi-site deployments, compliance requirements
-
-### **Network Auditing & Compliance**
-Continuously scan your network to ensure configurations match documented standards and detect unauthorized changes.
-
-**Ideal for**: Regulated industries, security-focused organizations, change management processes
-
-### **Infrastructure Documentation**
-Keep your network documentation current by automatically updating NetBox with discovered changes to your network topology.
-
-**Ideal for**: Growing organizations, complex networks, automation initiatives
-
-## Key Features
-
-- **Automated Network Discovery**: Schedule scans and identify devices and assets across your network using multiple discovery backends
-- **Flexible Configuration**: Define custom discovery policies tailored to specific network environments through YAML configuration  
-- **Enterprise Security**: Integrate with external secret stores like HashiCorp Vault for secure credential handling
-- **Multiple Discovery Methods**: Support for network discovery, device discovery, and worker backend capabilities
-- **Seamless Integration**: Fully integrated with NetBox through Diode for data ingestion and reconciliation
-- **Production Ready**: Docker-based deployment designed for enterprise scaling and management
-
-## Architecture Overview
-
-NetBox Discovery leverages the orb-agent, a containerized Go application that uses network protocols (ICMP, TCP, UDP, SSH) to discover devices and other network assets. The agent is configured through YAML files that define:
-
-- **Configuration Sources**: Local files or Git repositories for policy management
-- **Secrets Management**: Integration with external secret stores for credential security
-- **Discovery Policies**: Customizable rules for network scanning and device identification
-- **Backend Selection**: Choice of discovery methods based on network requirements
-
-Discovered data is sent to Diode for ingestion into NetBox, where it can be matched and reconciled to identify drift and deviations. The NetBox database is updated where relevant, ensuring data accuracy and reducing manual entry.
-
-## Support and Resources
-
-- **Getting Started**: For complete setup instructions, see the [NetBox Discovery Getting Started Guide](getting-started.md)
-- **Diode Documentation**: For advanced Diode configuration and SDK usage, see the [Diode documentation](../netbox-extensions/diode/index.md)
-- **GitHub Repository**: Find the orb-agent source code [here](https://github.com/netboxlabs/orb-agent)
-- **Community Support**: Connect with the community on [Slack](https://netdev.chat/) in the `#netbox` channel
-
----
-By leveraging **NetBox Discovery**, organizations can enhance their network visibility, streamline IT operations, and maintain an accurate source of truth for their network infrastructure.
-
diff --git a/docs/netbox-enterprise/nbe-azure-group-mapping.md b/docs/netbox-enterprise/nbe-azure-group-mapping.md
deleted file mode 100644
index 66f2ef68..00000000
--- a/docs/netbox-enterprise/nbe-azure-group-mapping.md
+++ /dev/null
@@ -1,42 +0,0 @@
-# NetBox Enterprise Entra ID Group Mapping
-Place the following in configuration overrides python section
-
-## Basic SSO
-```shell
-REMOTE_AUTH_BACKEND = 'social_core.backends.azuread.AzureADOAuth2'
-SOCIAL_AUTH_AZUREAD_OAUTH2_KEY = '{APPLICATION_ID}'
-SOCIAL_AUTH_AZUREAD_OAUTH2_SECRET = '{SECRET_VALUE}'
-```
-
-## Group Mappings
-```shell
-SOCIAL_AUTH_AZUREAD_OAUTH2_RESOURCE = 'https://graph.microsoft.com/'
-SOCIAL_AUTH_PIPELINE = (
-    'social_core.pipeline.social_auth.social_details',
-    'social_core.pipeline.social_auth.social_uid',
-    'social_core.pipeline.social_auth.social_user',
-    'social_core.pipeline.user.get_username',
-    'social_core.pipeline.social_auth.associate_by_email',
-    'social_core.pipeline.user.create_user',
-    'social_core.pipeline.social_auth.associate_user',
-    'netbox.authentication.user_default_groups_handler',
-    'social_core.pipeline.social_auth.load_extra_data',
-    'social_core.pipeline.user.user_details',
-    'nbc_auth_extensions.azure_authentication.azuread_map_groups',
-)
-
-
-# Define special user types using groups. Exercise great caution when assigning superuser status.
-SOCIAL_AUTH_PIPELINE_CONFIG = {
-    'AZUREAD_USER_FLAGS_BY_GROUP': {
-        "is_staff": ['{ENTRA_GROUP_ID1}','{ENTRA_GROUP_ID2}'],
-        "is_superuser": ['{ENTRA_GROUP_ID1}','{ENTRA_GROUP_ID2}']
-    },
-
-    'AZUREAD_GROUP_MAP': {
-        '{ENTRA_GROUP_ID1}': '{NETBOX_GROUP1}',
-        '{ENTRA_GROUP_ID2}': '{NETBOX_GROUP2}',
-    }
-
-}
-```
\ No newline at end of file
diff --git a/docs/netbox-enterprise/nbe-azure-sso.md b/docs/netbox-enterprise/nbe-azure-sso.md
deleted file mode 100644
index 298fedba..00000000
--- a/docs/netbox-enterprise/nbe-azure-sso.md
+++ /dev/null
@@ -1,79 +0,0 @@
-# Microsoft Entra ID Setup (formerly Azure Active Directory)
-
-This guide explains how to configure single sign-on (SSO) support for NetBox Enterprise using Microsoft Entra ID (formerly Azure Active Directory) as an authentication backend.
-
-## Entra ID Configuration
-1. Create a test user (optional)
-Create a new Entra ID user to be used for testing. You can skip this step if you already have a suitable account created.
-
-2. Create an app registration
-Under the Microsoft Entra ID dashboard, navigate to **Add** > **App registration**.
-
-    ![Add an app registration](../images/azure-sso/azure_ad_add_app_registration.png)
-
-    Enter a name for the registration (e.g. "NetBox Enterprise") and ensure that the "single tenant" option is selected.
-
-    Under "Redirect URI", select "Web" for the platform and enter the path to your NetBox Enterprise installation, ending with /oauth/complete/azuread-oauth2/. 
-
-    Eg. https://{your-domain}.com/oauth/complete/azuread-oauth2/
-
-    ![Add an app registration](../images/azure-sso/azure_ad_app_registration.png)
-
-    Once finished, make note of the application (client) ID; this will be used when configuring NetBox Enterprise instance.
-
-    ![Completed app registration](../images/azure-sso/azure_ad_app_registration_created.png)
-
-
-    **Multitenant authentication**
-
-    NetBox also supports multitenant authentication via Entra ID, however it requires a different backend and an additional configuration parameter. Please see the `python-social-auth` [documentation](https://python-social-auth.readthedocs.io/en/latest/backends/azuread.html#tenant-support) for details concerning multitenant authentication.
-
-3. Create a secret
-
-    When viewing the newly-created app registration, click the "Add a certificate or secret" link under "Client credentials". Under the "Client secrets" tab, click the "New client secret" button.
-
-    ![Add a client secret](../images/azure-sso/azure_ad_add_client_secret.png)
-
-    You can optionally specify a description and select a lifetime for the secret.
-
-    ![Client secret parameters](../images/azure-sso/azure_ad_client_secret.png)
-
-    Once finished, make note of the secret value (not the secret ID); this will be used when configuring your NetBox Enterprise instance.
-
-    ![Client secret parameters](../images/azure-sso/azure_ad_client_secret_created.png)
-
-## NetBox Enterprise Configuration
-
-After completing the app registration, navigate to the `Config tab` in the NetBox Enterprise admin console, scroll down to `Advanced Settings` and tick the `Show Advanced Settings` check box. 
-
-![advanced settings](../images/netbox-enterprise/advanced_settings.png)
-
-Then, in the  the `NetBox Python Configuration Overrides` field paste the following value from the previous steps:
-
-```shell
-REMOTE_AUTH_BACKEND = 'social_core.backends.azuread.AzureADOAuth2' 
-SOCIAL_AUTH_AZUREAD_OAUTH2_KEY = 'APPLICATION_ID' 
-SOCIAL_AUTH_AZUREAD_OAUTH2_SECRET = 'SECRET_VALUE'
-```
-
-Once added, scroll down to the bottom of the page and click `Save config`. Follow the prompt to `Go to updated version` and click the `Deploy` button to deploy the updated version of your app with the configuration changes. 
-
-## Testing
-Open your NetBox Instance once it is back up in the `Ready` state. Log out of NetBox instance if already authenticated, and click the "Log In" button at top right. You should see the normal login form as well as an option to authenticate using Entra ID. Click that link.
-
-![NetBox Entra ID login form](../images/azure-sso/netbox_azure_ad_login.png)
-
-You should be redirected to Microsoft's authentication portal. Enter the username/email and password of your account to continue. You may also be prompted to grant this application access to your account.
-
-![Microsoft authentication portal](../images/azure-sso/azure_ad_login_portal.png)
-
-If successful, you will be redirected back to the NetBox Enterprise UI, and will be logged in as the Entra ID user. You can verify this by navigating to your profile (using the button at top right).
-
-This user account has been replicated locally to NetBox Enterprose, and can now be assigned groups and permissions within the NetBox Enterprise admin UI.
-
-## Troubleshooting
-### Redirect URI does not Match
-Entra ID requires that the authenticating client request a redirect URI that matches what you've configured for the app in step two. This URI must begin with https:// 
-
-### Not Logged in After Authenticating
-If you are redirected to the NetBox Enterprise UI after authenticating successfully, but are not logged in, double-check the configured backend and app registration. The instructions in this guide pertain only to the `azuread.AzureADOAuth2` backend using a single-tenant app registration.
\ No newline at end of file
diff --git a/docs/netbox-enterprise/nbe-backups.md b/docs/netbox-enterprise/nbe-backups.md
deleted file mode 100644
index 2840d66c..00000000
--- a/docs/netbox-enterprise/nbe-backups.md
+++ /dev/null
@@ -1,306 +0,0 @@
-# NetBox Enterprise Backups
-
-Much like the NetBox software itself, NetBox Enterprise uses 2 main datastores: PostgreSQL, and Redis.
-
-PostgreSQL is used for the primary model data in NetBox, including sites, facilities, racks, and so on.
-
-Redis is used for internal caching and the task queue.
-
-For each type of datastore you can choose to use a built-in deployment, or configure NetBox Enterprise to use an existing external resource already in your environment.
-
-## External Databases
-
-!!! info
-    If you are providing your own database(s) for use by NetBox Enterprise, it is expected that you have your own processes for high availability, backup, and restore.
-
-## Using Disaster Recovery for Backups
-
-A disaster recovery backup will preserve the complete state of your NetBox Enterprise install, from allocated volumes to databases to custom configuration.
-
-This feature is included in NetBox Enterprise installs, and can be enabled by installing some extra dependencies to your cluster for KOTS installs.
-
-### Backing Up the NetBox Enterprise Installation
-
-1. Navigate to the backup configuration by clicking the _^^Backup settings^^_ link in the **Disaster Recovery** section of the admin console.
-   ![Backup settings](../images/netbox-enterprise/netbox-enterprise-ec-backup-settings.png){ width=75% }
-2. Input your S3 bucket, credentials, endpoint, and region.<br>
-   ![Configure S3](../images/netbox-enterprise/netbox-enterprise-ec-configure-s3.png){ width=75% }
-3. Click **Update storage settings** -- it will spend a few moments validating that your settings work.<br>
-   ![Update storage settings](../images/netbox-enterprise/netbox-enterprise-ec-update-settings.png){ width=75% }
-4. Perform a backup by clicking the **Backups** tab, and then clicking **Start backup**.<br>
-   ![Start backup](../images/netbox-enterprise/netbox-enterprise-ec-start-backup.png)
-
-### Restoring the NetBox Enterprise Installation
-
-1. Download the latest NetBox Enterprise installer following the same instructions you did for a new install, if you haven't already.
-2. Run: `./netbox-enterprise restore`
-3. Enter the same S3 credentials you use for backups.<br>
-   ![S3 Credentials](../images/netbox-enterprise/netbox-enterprise-ec-restore-s3.png){ width=75% }
-4. Next, it will take a few minutes to bring up the node.
-   When it's complete, you will be prompted to continue the restore:<br>
-   ![Restore from backup instance?](../images/netbox-enterprise/netbox-enterprise-ec-restore-prompt.png)
-5. Enter `Y` to continue, and the restore will launch the cluster.
-6. (Optional) If you plan to have more than one node in the new cluster, you can go to the admin console and configure them when prompted.
-7. Enter `continue` to finish bringing the NetBox Enterprise application up.<br>
-   ![Continue restore](../images/netbox-enterprise/netbox-enterprise-ec-restore-continue.png)
-8. It will take a few more minutes to finish bringing the application up, and then you will see "Application restored!"<br>
-   ![Application restored!](../images/netbox-enterprise/netbox-enterprise-ec-restore-complete.png){ width=90% }<br>
-   NetBox Enterprise and the Admin Console should now be completely restored and available as normal.
-
-<!-- ### KOTS Install -->
-
-## Manual Backup and Restore
-
-Besides disaster recovery, it is also a good idea to keep backups of your data in case you want to view, partially restore, or move your data to another system.
-
-!!! info "NetBox Enterprise Namespace"
-    The default namespace is `kotsadm`.
-
-    The instructions below default to `kotsadm`, but you can change the `NETBOX_NAMESPACE` variable to match your system.
-
-### Backing Up Your Data
-
-Backing up NetBox Enterprise's data manually is reasonably simple, and Kubernetes makes it easy to access them from the command-line.
-
-!!! warning "Before You Back Up: Accessing Your Cluster"
-    Before you can back anything up, you must first make sure you can access the cluster on the command line.
-
-    See the [advanced tools documentation](./nbe-troubleshooting.md#accessing-your-cluster-from-the-command-line) for details on connecting to your NetBox Enterprise cluster.
-
-#### Media, Scripts, and Reports
-
-Runtime files are stored in a volume accessible from the NetBox containers.
-To back them up, you can run this:
-
-```shell
-NETBOX_NAMESPACE="$(kubectl get deployments \
-  -A -l 'app.kubernetes.io/component=netbox' \
-  -ojsonpath='{.items[0].metadata.namespace}')" && \
-NETBOX_MAIN_POD="$(kubectl get pod \
-  -o name \
-  -n "${NETBOX_NAMESPACE}" \
-  -l 'app.kubernetes.io/component=netbox' \
-  | head -n 1 \
-  )" && \
-kubectl exec "${NETBOX_MAIN_POD}" \
-  -n "${NETBOX_NAMESPACE}" \
-  -c netbox \
-  -- /bin/sh -c ' \
-      cd /opt/netbox/netbox && \
-      find media scripts reports static -type f > /tmp/files.txt && \
-      tar -czf - \
-      --owner=0 \
-      --group=0 \
-      -T /tmp/files.txt' > netbox-data.tar.gz
-```
-
-#### Built-In PostgreSQL
-
-The built-in PostgreSQL is deployed using the CrunchyData Postgres Operator.
-
-Since the PostgreSQL CLI tools are already available inside the cluster, all we need to do to dump the database is to call into the correct container and run a `pg_dump` there.
-
-To perform a database dump, run these commands:
-
-```shell
-NETBOX_NAMESPACE="$(kubectl get deployments \
-  -A -l 'app.kubernetes.io/component=netbox' \
-  -ojsonpath='{.items[0].metadata.namespace}')" && \
-NETBOX_DATABASE_FILE="netbox-enterprise.pgsql" && \
-POSTGRESQL_MAIN_POD="$(kubectl get pod \
-  -o name \
-  -n "${NETBOX_NAMESPACE}" \
-  -l 'postgres-operator.crunchydata.com/role=master' \
-  | head -n 1 \
-  )" && \
-EXCLUDE_DATABASES="$(kubectl exec "${POSTGRESQL_MAIN_POD}" \
-  -n "${NETBOX_NAMESPACE}" \
-  -c database \
-  -- \
-    psql -t -c "SELECT CONCAT('--exclude-database=', datname) \
-      FROM pg_database \
-      WHERE datname <> ALL ('{netbox,diode,hydra}')" \
-)" && \
-kubectl exec "${POSTGRESQL_MAIN_POD}" \
-  -n "${NETBOX_NAMESPACE}" \
-  -c database \
-  -- \
-    pg_dumpall \
-      $EXCLUDE_DATABASES \
-    > "${NETBOX_DATABASE_FILE}"
-```
-
-This will create a `netbox-enterprise.pgsql` file in your local directory.
-Save it somewhere safe for future restores.
-
-For more details on backing up NetBox databases, see [the official NetBox documentation](https://netboxlabs.com/docs/netbox/en/stable/administration/replicating-netbox/).
-
-#### Diode and Hydra Secrets (NetBox 1.10 and Up)
-
-To ensure that Diode OAuth login information is not lost, you will also need to save the Diode and Hydra secrets from the cluster.
-
-Run this set of commands:
-
-```shell
-NETBOX_NAMESPACE="$(kubectl get deployments \
-  -A -l 'app.kubernetes.io/component=netbox' \
-  -ojsonpath='{.items[0].metadata.namespace}')" && \
-(
-  kubectl get secrets \
-    --namespace "${NETBOX_NAMESPACE}" \
-    --no-headers \
-    --output name \
-  | grep secret/diode \
-  | while read -r SECRET; do \
-    echo "---" && \
-    kubectl get \
-      "${SECRET}" \
-      --namespace "${NETBOX_NAMESPACE}" \
-      -o yaml \
-    | grep -v -E '^  (creationTimestamp|resourceVersion|uid):'; \
-  done \
-) > netbox-enterprise-diode-secrets.yaml
-```
-
-Save it alongside your `netbox-enterprise.pgsql` for future restores.
-
-### Restoring Your Backups
-
-Restoring is almost as simple as backing up.
-You just need to put NetBox Enterprise into restore mode first.
-
-#### Enabling and Disabling Restore Mode
-
-1. Put NetBox Enterprise into "Restore Mode" by going to the _Config_ tab and checking the _Enable Restore Mode_ checkbox.
-   ![Enable Restore Mode](../images/netbox-enterprise/netbox-enterprise-restore-mode-enable.png)
-2. Click the "Save config" button at the bottom of the form, and then when the admin console prompts you, click "go to updated version".<br>
-   ![Go to updated version](../images/netbox-enterprise/netbox-enterprise-restore-mode-updated-version.png){ width=75% }
-3. Confirm that the _New version available_ at the top denotes it's a config change, and if so click the "Deploy" button.
-   ![Deploy](../images/netbox-enterprise/netbox-enterprise-restore-mode-deploy.png)
-
-This will shut down NetBox but leave the other NetBox Enterprise infrastructure up, so you can safely restore.
-
-When you are done restoring your data, just follow the same steps, unchecking _Enable Restore Mode_ and deploying the updated configuration.
-
-#### Media, Scripts, and Reports
-
-To restore media, scripts, and reports, you just need to unpack them into the correct directory inside a NetBox container.
-
-!!! note
-    The backup instructions above back up all three of the `media/`, `scripts/`, and `reports/` subdirectories in one file.
-
-    If you are restoring a backup from another NetBox instance, you might need to change the name of the tarball and the path after the `-C` at the end of this command to unpack your backup into the right location.
-
-```shell
-NETBOX_NAMESPACE="$(kubectl get deployments \
-  -A -l 'app.kubernetes.io/component=netbox' \
-  -ojsonpath='{.items[0].metadata.namespace}')" && \
-NETBOX_RESTORE_POD="$(kubectl get pod \
-  -o name \
-  -n "${NETBOX_NAMESPACE}" \
-  -l 'app.kubernetes.io/component=restore-mode' \
-  | head -n 1 \
-  )" && \
-cat netbox-data.tar.gz | kubectl exec ${NETBOX_RESTORE_POD} \
-  -n "${NETBOX_NAMESPACE}" \
-  -i \
-  -- tar -xvzf - \
-    --no-same-owner \
-    --no-same-permission \
-    -C /opt/netbox/netbox
-```
-
-#### Diode and Hydra Secrets (NetBox 1.10 and Up)
-
-To restore from a secrets yaml file, pass it to `kubectl apply` like so:
-
-```shell
-# add/replace existing diode secrets
-NETBOX_NAMESPACE="$(kubectl get deployments \
-  -A -l 'app.kubernetes.io/component=netbox' \
-  -ojsonpath='{.items[0].metadata.namespace}')" && \
-kubectl apply \
-  --server-side \
-  --force-conflicts \
-  --namespace "${NETBOX_NAMESPACE}" \
-  --filename netbox-enterprise-diode-secrets.yaml
-```
-
-#### Built-In PostgreSQL
-
-To restore from a dump file, pipe the `netbox-enterprise.pgsql` created during backup into `psql` in the PostgreSQL pod:
-
-```shell
-NETBOX_NAMESPACE="$(kubectl get deployments \
-  -A -l 'app.kubernetes.io/component=netbox' \
-  -ojsonpath='{.items[0].metadata.namespace}')" && \
-NETBOX_DATABASE_FILE="netbox-enterprise.pgsql" && \
-DIODE_DEPLOYMENT_COUNT="$(kubectl get deployments -n "${NETBOX_NAMESPACE}" -o name | grep -c diode || :)" && \
-HYDRA_DEPLOYMENT_COUNT="$(kubectl get deployments -n "${NETBOX_NAMESPACE}" -o name | grep -c hydra || :)" && \
-POSTGRESQL_MAIN_POD="$(kubectl get pod \
-  -o name \
-  -n "${NETBOX_NAMESPACE}" \
-  -l 'postgres-operator.crunchydata.com/role=master' \
-  | head -n 1 \
-  )" && \
-for DB in netbox diode hydra; do
-  kubectl exec "${POSTGRESQL_MAIN_POD}" \
-    -n "${NETBOX_NAMESPACE}" \
-    -c database \
-    -- dropdb --if-exists --force "${DB}"; \
-done && \
-( \
-  if [ "${DIODE_DEPLOYMENT_COUNT}" -gt 0 ]; then \
-    echo "CREATE DATABASE diode WITH TEMPLATE = template0 ENCODING = 'UTF8';"; \
-  fi && \
-  if [ "${HYDRA_DEPLOYMENT_COUNT}" -gt 0 ]; then \
-    echo "CREATE DATABASE hydra WITH TEMPLATE = template0 ENCODING = 'UTF8';"; \
-  fi && \
-  echo "CREATE DATABASE netbox WITH TEMPLATE = template0 ENCODING = 'UTF8';"; \
-) \
-| kubectl exec "${POSTGRESQL_MAIN_POD}" \
-  -n "${NETBOX_NAMESPACE}" \
-  -i \
-  -c database \
-    -- psql -d template1 -f- && \
-grep -v -E '^(ALTER|CREATE|DROP) (DATABASE|ROLE) ' "${NETBOX_DATABASE_FILE}" \
-| kubectl exec "${POSTGRESQL_MAIN_POD}" \
-  -n "${NETBOX_NAMESPACE}" \
-  -i \
-  -c database \
-    -- psql -d netbox -f-
-```
-
-Following this run the below to ensure all database permissions are correct:
-
-```shell
-NETBOX_NAMESPACE="$(kubectl get deployments \
-  -A -l 'app.kubernetes.io/component=netbox' \
-  -ojsonpath='{.items[0].metadata.namespace}')" && \
-POSTGRESQL_MAIN_POD="$(kubectl get pod \
-  -o name \
-  -n "${NETBOX_NAMESPACE}" \
-  -l 'postgres-operator.crunchydata.com/role=master' \
-  | head -n 1 \
-  )" && \
-for DB in $(kubectl exec "${POSTGRESQL_MAIN_POD}" \
-  -n "${NETBOX_NAMESPACE}" \
-  -c database \
-  -- \
-    psql -t -c "SELECT datname FROM pg_database WHERE datname IN ('netbox', 'hydra', 'diode');"; \
-); do \
-  kubectl exec "${POSTGRESQL_MAIN_POD}" \
-  -n "${NETBOX_NAMESPACE}" \
-  -i \
-  -c database \
-  -- \
-    psql --dbname "${DB}" -e -c "\
-      ALTER DATABASE ${DB} OWNER TO ${DB}; \
-      GRANT ALL PRIVILEGES ON DATABASE ${DB} TO ${DB}; \
-      GRANT CREATE ON SCHEMA public TO ${DB}; \
-      GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public TO ${DB}; \
-      GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO ${DB}; \
-      GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO ${DB}; \
-    "; \
-done
-```
diff --git a/docs/netbox-enterprise/nbe-ec-built-in-plugins.md b/docs/netbox-enterprise/nbe-ec-built-in-plugins.md
deleted file mode 100644
index cd655dd8..00000000
--- a/docs/netbox-enterprise/nbe-ec-built-in-plugins.md
+++ /dev/null
@@ -1,36 +0,0 @@
-# Built-in Plugins in NetBox Enterprise
-
-NetBox Enterprise ships with a curated set of built-in plugins that extend the platform's core capabilities—offering enhanced features without the complexity of manual setup. These plugins are pre-integrated and supported within the platform, ensuring streamlined deployment and reliable performance.
-
-## Available Plugins
-
- Built-in plugins are regularly added to NetBox Enterprise as new releases become available. For the most current list of built-in plugins, refer to the [NetBox Enterprise Release Notes](https://netboxlabs.com/docs/netbox-enterprise/nbe-release-notes/).
-
-## Plugin Management and Deployment
-
-The following steps will guide you through installation of built-in plugins:
-
-1. Navigate to the `Config` tab in the admin console.
-2. Enable `Advanced Settings` by clicking the 'Show Advanced Settings' checkbox:
-![Screenshot: advanced settings](../images/netbox-enterprise/advanced_settings.png){ style="max-width: 75%" }
-3. In the **NetBox Python Configuration Overrides** field, define your plugin list:
-```
-PLUGINS = ['netbox_topology_views', 'netbox_bgp']
-```
-4. Additional plugin options can be configured in the override as well. Below is an example for NetBox Topology Views:
-```
-PLUGINS_CONFIG = {
-    'netbox_topology_views': {
-        'allow_coordinates_saving': True,
-        'always_save_coordinates': True
-    }
-}
-``` 
-*Be sure to consult the plugin’s GitHub repository for specific configuration details.* 
-5. Save the configuration at the bottom of the page. When prompted, click **Go to updated version**, then select **Deploy** to apply the configuration changes.
-
-Once your NetBox Enterprise is back in a `Ready` state, log in to your instance and your plugins will be available. 
-
-
-
-
diff --git a/docs/netbox-enterprise/nbe-ec-custom-plugins.md b/docs/netbox-enterprise/nbe-ec-custom-plugins.md
deleted file mode 100644
index e3a342b2..00000000
--- a/docs/netbox-enterprise/nbe-ec-custom-plugins.md
+++ /dev/null
@@ -1,148 +0,0 @@
-# Installing Custom NetBox Plugins
-
-While NetBox Enterprise comes with a variety of certified and other community plugins built-in, there are cases where you will want to include additional plugins in your NetBox runtime.
-
-To do so, you will need to create a tarball containing the plugins you wish to install, known as a wheelhouse archive.
-
-!!! note
-    On each startup, the wheelhouse's contents will be re-applied to a fresh NetBox Python environment.
-
-## Create a working directory
-
-First, create a temporary directory for your plugin downloads to go:
-
-```{.bash}
-mkdir /tmp/wheelhouse
-```
-
-## Dowload the `constraints.txt` file for your release
-
-You can use `kubectl cp` to download a constraints file that contains a complete list of the pre-installed Python modules in your NetBox Enterprise version.
-
-To do so, download it with this command:
-
-```{.bash}
-sudo ./netbox-enterprise shell
-
-NBE_SOURCE_POD="$( \
-  kubectl get pods -A \
-  -o go-template='{{ range .items }}{{ .metadata.name }}{{ "\n" }}{{ end }}' \
-  -l com.netboxlabs.netbox-enterprise/custom-plugins-upload=true \
-  --field-selector status.phase=Running \
-  | head -n 1 \
-)"
-NETBOX_NAMESPACE="$(kubectl get deployments \
-  -A -l 'app.kubernetes.io/component=netbox' \
-  -ojsonpath='{.items[0].metadata.namespace}')"
-
-kubectl cp \
-  --namespace "${NETBOX_NAMESPACE}" \
-  "${NBE_SOURCE_POD}:/opt/netbox/constraints.txt" \
-  /tmp/wheelhouse/constraints.txt
-```
-
-## Create Wheels From Your Custom Modules
-
-If you are including any custom Python modules that aren't in PyPy, you will need to create wheel archives from them.
-You can generate them with `pip wheel`, passing one or more paths or archives, like so:
-
-```{.bash}
-pip wheel \
-  --prefer-binary \
-  --wheel-dir "/tmp/wheelhouse" \
-  --constraint /tmp/wheelhouse/constraints.txt \
-  </path/to/your/python-module-dir|/path/to/your/python-module.tar.gz>
-```
-
-!!! note
-    If your custom modules require compilation, you should build them on an `x86_64` platform running Ubuntu 24 LTS and Python 3.12 so they match NetBox Enterprise's containers.
-
-## Create a `requirements.txt`
-
-Create a file called `requirements.txt` in your `/tmp/wheelhouse` directory, listing each of the plugins you'd like to include.
-
-If you created custom wheels, make sure you add them to `requirements.txt` like any other dependency.
-
-For details on the format of requirements files, please see the [pip documentation](https://pip.pypa.io/en/stable/reference/requirements-file-format/).
-However, it is strongly recommended that you use `==` to include a specific known and tested version in your requirements file.
-
-## Use `pip` to download the plugins and their dependencies
-
-Next, use `pip` to populate the wheelhouse folder with any other dependencies, by running it with the `download` command, and the arguments necessary to pull the correct architecture and version to run inside the NetBox Enterprise container:
-
-```{.bash}
-pip download \
-  --platform="manylinux_2_17_x86_64" \
-  --only-binary=":all:" \
-  --python-version="3.12" \
-  --dest "/tmp/wheelhouse" \
-  --find-links "/tmp/wheelhouse" \
-  -c /tmp/wheelhouse/constraints.txt \
-  -r /tmp/wheelhouse/requirements.txt
-```
-
-If all went well, you should see `*.whl` files in the `/tmp/wheelhouse/` folder for each of the packages you specified, as well as their dependencies.
-
-## Create the archive
-
-Finally, create the archive:
-
-```{.bash}
-tar -C /tmp \
-    -czf /tmp/wheelhouse.tar.gz \
-    wheelhouse
-```
-
-This should create a tarball that contains the `wheelhouse/` directory and everything inside of it.
-
-## Add your plugins to NetBox Enterprise
-
-On your NetBox Enterprise node, you can now upload the wheelhouse to a media directory.
-Note that this should work whether or not you are in restore mode.
-Both are configured to be able to accept wheelhouse uploads.
-
-To do so, run this:
-
-```{.bash}
-sudo ./netbox-enterprise shell
-
-NBE_SOURCE_POD="$( \
-  kubectl get pods -A \
-  -o go-template='{{ range .items }}{{ .metadata.name }}{{ "\n" }}{{ end }}' \
-  -l com.netboxlabs.netbox-enterprise/custom-plugins-upload=true \
-  --field-selector status.phase=Running \
-  | head -n 1 \
-)"
-NETBOX_NAMESPACE="$(kubectl get deployments \
-  -A -l 'app.kubernetes.io/component=netbox' \
-  -ojsonpath='{.items[0].metadata.namespace}')"
-
-kubectl cp \
-  --namespace "${NETBOX_NAMESPACE}" \
-  /tmp/wheelhouse.tar.gz \
-  "${NBE_SOURCE_POD}:/opt/netbox/netbox/media/wheelhouse.tar.gz"
-```
-
-## Enable and Configure Your Plugins
-
-In the Admin Console configuration, make sure _Show Advanced Settings_ is checked.
-In the Python configuration overrides box, you can enter `PLUGINS = [...]` and `PLUGINS_CONFIG = {}` just as you would for any NetBox install.
-For details, see the [NetBox plugin documentation](https://netboxlabs.com/docs/netbox/en/stable/configuration/plugins/).
-
-## Restart the NetBox containers
-
-The next time the NetBox pods restart, your changes should be automatically applied.
-
-If you are in restore mode, switching out of restore mode will enable installation of your plugins.
-If you are not, a "redeploy" in the admin console will trigger the same.
-
-# Migrations and Upgrades
-
-When upgrading to a new NetBox Enterprise version which includes a different version of the included NetBox, you will likely need to generate a new wheelhouse file that matches its changed dependencies.
-
-To do so, you should perform the following steps:
-
-1. Put NetBox Enterprise into "restore mode" in the Admin Console configuration, and deploy the config change.
-2. Deploy the new NetBox Enterprise version.
-3. Redo the instructions above to download the new `constraints.txt` file, create, and then upload a new wheelhouse tarball.
-4. Uncheck "restore mode" and deploy.
\ No newline at end of file
diff --git a/docs/netbox-enterprise/nbe-ec-installation.md b/docs/netbox-enterprise/nbe-ec-installation.md
deleted file mode 100644
index 950d10e1..00000000
--- a/docs/netbox-enterprise/nbe-ec-installation.md
+++ /dev/null
@@ -1,125 +0,0 @@
-# NetBox Enterprise Installation
-
-You should be able to follow these instructions for installing NetBox Enterprise in most environments.
-
-!!! Note
-    The hostname and IP address of the host cannot be changed after installation, and must be finalized before proceeding.
-
-## Deploying the cluster
-
-The following steps are required for a NetBox Enterprise installation.
-
-1. Download the installer and license file to your host (the `Authorization` token should be provided by NetBox Labs):
-
-     ```
-      curl -f "https://app.enterprise.netboxlabs.com/embedded/netbox-enterprise/stable" -H "Authorization: <provided by NetBox Labs>" -o netbox-enterprise-stable.tgz
-     ```
-       Confirm the file size is ~300MB
-
-2. Uncompress the package and launch the installation:
-
-      ```
-      tar -xvzf netbox-enterprise-stable.tgz
-      sudo ./netbox-enterprise install --license license.yaml
-      ```
-
-      You’ll be requested to create a password for the NetBox Enterprise admin console. A Kubernetes cluster will then be deployed, ready to host all the NetBox application components. The deployment of the cluster is complete with this message:
-
-      ```{.bash .no-copy} 
-      Visit the Admin Console to configure and install netbox-enterprise: http://my.netbox-enterprise.host:30000
-      ```
-
-## Deploying NetBox
-
-Access the NetBox Enterprise admin console and configure NetBox.
-
-**Open the provided URL in a browser. A prompt will require the password created in Step 2:**
-
-![Screenshot: Welcome to the NetBox Enterprise Admin Console](../images/netbox-enterprise/installation/ent-01-welcome.png){ style="max-width: 75%" }
-
-**Click `Start` and you will be greeted by a warning about self-signed certificates:**
-
-![Screenshot: Secure the Admin Console](../images/netbox-enterprise/installation/ent-02a-tls.png){ style="max-width: 75%" }
-
-**Click `Continue` and accept the self-signed TLS certificate according to the instructions for your browser.**
-
-You will then be prompted to optionally set a hostname and upload a self-signed certificate.
-It is recommended that you set the hostname now, but if you do not upload a TLS certificate you can do it later.
-Instructions for TLS configuration are available in [the TLS and Ingress documentation](nbe-tls-ingress.md)
-
-![Screenshot: Secure the Admin Console](../images/netbox-enterprise/installation/ent-02b-tls.png){ style="max-width: 75%" }
-
-**Log In to the Admin Console**
-
-Once TLS is configured, you will be prompted to log in to the NetBox Enterprise Admin Console.
-Enter the password you created in the installer CLI.
-
-![Screenshot: Log In](../images/netbox-enterprise/installation/ent-03-login.png){ style="max-width: 75%" }
-
-**Once logged in, you'll be presented with the option to add additional nodes to the cluster.** 
-
-**Do not** configure additional nodes, it is currently not supported.
-
-!!! danger "Multi-Node Clusters"
-    Adding nodes to the cluster is **currently not supported**.
-
-![Screenshot: Nodes](../images/netbox-enterprise/installation/ent-04-cluster.png){ style="max-width: 75%" }
-
-**Click `Continue` to move on to the NetBox Enterprise configuration wizard.**
-
-## Configure NetBox Enterprise
-
-A wizard will guide the configuration of NetBox for the environment:
-
-**Provisions a Superuser and password:**
-![Screenshot: NetBox Configuration](../images/netbox-enterprise/installation/ent-05-superuser.png){ style="max-width: 75%" }
-
-**Set the number of replicas and choose a preset for the resources allocated to NetBox.**
-
-_It is recommended that you set the number of replicas to `1` until initial installation has completed, and then update it to a higher value._
-
-![Screenshot: Replicas and Resources](../images/netbox-enterprise/installation/ent-06-replicas-and-resources.png){ style="max-width: 75%" }
-
-!!! warning "Be Advised"
-    Do not enable Restore Mode when initially setting up NetBox or the installation will fail.
-
-**Configure your PostgreSQL database and Redis cache:**
-
-Choose the built-in or external PostgreSQL:
-  ![Screenshot: Built-in or external PostgreSQL](../images/netbox-enterprise/installation/ent-07-postgresql.png){ style="max-width: 75%" }
-
-Choose the built-in or external Redis object store:
-  ![Screenshot: Built-in or external Redis](../images/netbox-enterprise/installation/ent-08-redis.png){ style="max-width: 75%" }
-
-<!-- Advanced settings to configure plugins and SSO remote authentication, and IPv4/IPv6 compatibility:
-  ![Advanced Settings](../images/netbox-enterprise/netbox-enterprise-advanced.png)
-For now, skip `Advanced Settings` 
-  -->
-
-**Finally, accept the terms of service by writing "ACCEPT" (case-insensitive) and you can proceed to the deployment.**
-
-![Screenshot: Accept TOS](../images/netbox-enterprise/installation/ent-09-accept.png){ style="max-width: 75%" }
-
-## Finish the Deployment
-
-Once you have accepted the terms of service, the installer will run some additional checks to make sure your host can run NetBox Enterprise.
-
-![Screenshot: Preflights](../images/netbox-enterprise/installation/ent-10-preflights.png){ style="max-width: 75%" }
-
-**Click `Deploy` to launch the first deployment.**
-
-You will then be redirected to the admin console Dashboard.
-The initial deployment will take longer than subsequent ones, as it brings up all subsystems for the first time and runs migrations to initialize the database.
-
-![Screenshot: Deployment "Unavailable"](../images/netbox-enterprise/installation/ent-11-deploying.png){ style="max-width: 75%" }
-
-The `Unavailable` status will change to `Ready` once the deployment is complete and NetBox has fully initialized:
-
-![Screenshot: Deployment "Ready"](../images/netbox-enterprise/installation/ent-12-ready.png){ style="max-width: 75%" }
-
-## Verify the Deployment
-
-Once you see `Ready`, NetBox Enterprise is fully deployed, and available on ports `80` and `443`.
-
-- ![Screenshot: NetBox Enterprise Login](../images/netbox-enterprise/installation/ent-13-nb-login.png){ style="max-width: 75%" }
-- ![Screenshot: NetBox Enterprise Home](../images/netbox-enterprise/installation/ent-14-nb-home.png)
\ No newline at end of file
diff --git a/docs/netbox-enterprise/nbe-ec-linux-changes.md b/docs/netbox-enterprise/nbe-ec-linux-changes.md
deleted file mode 100644
index 492e5f6c..00000000
--- a/docs/netbox-enterprise/nbe-ec-linux-changes.md
+++ /dev/null
@@ -1,63 +0,0 @@
-# Linux Root-Level Changes
-
-This document summarizes the system-level changes made to a Linux host when installing a NetBox Enterprise Embedded Cluster, particularly in relation to directories, files, and runtime configurations affected under `/`.
-
-## Key Directories Created
-
-During installation, the Embedded Cluster creates several directories for container runtimes, network configuration, logging, and Kubernetes internals. These directories may be used for binary placement, socket communication, runtime data, or logging.
-
-| Path                                         | Description                                                   |
-|----------------------------------------------|---------------------------------------------------------------|
-| `/etc/cni`                                   | CNI (Container Network Interface) configuration               |
-| `/etc/k0s`                                   | Configuration for the k0s Kubernetes distribution             |
-| `/opt/cni`                                   | Optional location for CNI plugin binaries                     |
-| `/opt/containerd`                            | Data and binaries for containerd runtime                      |
-| `/run/calico`                                | Calico's runtime data and state                               |
-| `/run/containerd`                            | Runtime socket and process management for containerd          |
-| `/run/k0s`                                   | Runtime files and PID info for k0s                            |
-| `/sys/fs/cgroup/kubepods`                    | cgroup hierarchy for Kubernetes pods                          |
-| `/sys/fs/cgroup/system.slice/containerd.service` | cgroup slice for the containerd system service               |
-| `/sys/fs/cgroup/system.slice/k0scontroller.service` | cgroup slice for the k0scontroller service                  |
-| `/usr/libexec/k0s`                           | Executables used by k0s, potentially for internal service components |
-| `/usr/local/bin/k0s`                         | The k0s binary, typically symlinked or copied here            |
-| `/var/lib/calico`                            | Persistent data for the Calico network plugin                 |
-| `/var/lib/cni`                               | CNI state and cache                                           |
-| `/var/lib/containers`                        | OCI container storage (may contain container images and layers) |
-| `/var/lib/kubelet`                           | State for the kubelet, pod manifests, volumes, etc.           |
-| `/var/log/calico`                            | Logs generated by Calico agents                               |
-| `/var/log/containers`                        | Logs for individual containers, typically symlinked from journald |
-| `/var/log/embedded-cluster`                  | Logs specific to Embedded Cluster installation and runtime    |
-| `/var/log/pods`                              | Logs organized by pod name/namespace                          |
-
-## Runtime & Kernel Modifications
-
-**cgroups** are used extensively to isolate resources:
-
-- `kubepods` cgroup under `/sys/fs/cgroup`
-- Systemd slices for services like `containerd` and `k0scontroller`
-- These modifications may impact systems with strict lockdowns or non-standard cgroup hierarchies.
-
-## Binaries and Services
-
-- The `k0s` binary is located at `/usr/local/bin/k0s`.
-- Services for `k0scontroller`, `containerd`, and possibly `calico` will be active post-install.
-- Services will install unit files in `/etc/systemd/system/`.
-
-## Firewall Requirements
-
-To allow proper operation of the Embedded Cluster, the following network ports must be open:
-
-| Port   | Protocol | Purpose                                           |
-|--------|----------|---------------------------------------------------|
-| 6443   | TCP      | Kubernetes API server (used by kubelets, kubectl, etc.) |
-| 2379-2380 | TCP   | etcd (Kubernetes backing store – internal traffic) |
-| 10250  | TCP      | Kubelet API for health checks and logs            |
-| 4789   | UDP      | VXLAN overlay (used by Calico)                    |
-| 8472   | UDP      | VXLAN (alternative port for Calico)               |
-| 51820  | UDP      | WireGuard (if enabled for Calico networking)      |
-| 179    | TCP      | BGP (used if Calico is in BGP mode)               |
-| 443    | TCP      | NetBox Enterprise UI and API access               |
-| 8800   | TCP      | Admin Console (legacy or diagnostic use)          |
-
-**Note:** Ingress/egress rules must permit internal pod-to-pod communication.
-For systems in restricted environments, please refer to the [Special Cases for Restricted Environments](./nbe-ec-requirements.md#special-cases-for-restricted-environments) section in the requirements documentation. This provides detailed guidance on configuring firewalls and network policies to ensure proper operation of the Embedded Cluster.
diff --git a/docs/netbox-enterprise/nbe-ec-requirements-rhel.md b/docs/netbox-enterprise/nbe-ec-requirements-rhel.md
deleted file mode 100644
index 930bbce8..00000000
--- a/docs/netbox-enterprise/nbe-ec-requirements-rhel.md
+++ /dev/null
@@ -1,223 +0,0 @@
-# NetBox Enterprise Requirements for Red Hat Enterprise Linux (RHEL)
-
-## Tested Versions
-
-This guide was used on fresh installs of the following versions of RHEL:
-
-- RHEL 9
-- RHEL 9.5
-
-## Steps to prepare RHEL
-
-### Disable Swap
-
-Swap can lead to unpredictable memory behavior in Kubernetes.
-
-```bash
-sudo swapoff -a
-sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
-```
-
-### Set SELinux to Permissibe mode (can be enforced later)
-
-```bash
-sudo setenforce Permissive
-sudo sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/sysconfig/selinux
-```
-
-### Configure Firewall
-
-If firewalld isn't installed
-
-```bash
-sudo dnf -y install dnf-plugins-core
-sudo dnf -y install firewalld
-sudo systemctl enable --now firewalld
-```
-
-Open required ports for the internal kubernetes platform.
-
-```bash
-# Kubernetes API, etcd, and control plane components
-sudo firewall-cmd --permanent --add-port={6443,2379,2380,10250,10251,10252,10255,5473,10257,10259}/tcp
-
-# NodePort range
-sudo firewall-cmd --permanent --add-port=30000-32767/tcp
-
-# BGP and VXLAN (optional, for Calico)
-sudo firewall-cmd --permanent --add-port=4789/udp
-sudo firewall-cmd --permanent --add-port=179/tcp
-
-# Reload firewall
-sudo firewall-cmd --reload
-```
-
-### Configure Kernel Modules and Parameters
-
-Install kernel headers:
-
-```bash
-sudo dnf -y install kernel-devel-$(uname -r)
-```
-
-Load and persist modules:
-
-```bash
-sudo modprobe br_netfilter ip_vs ip_vs_rr ip_vs_wrr ip_vs_sh overlay
-
-cat <<EOF | sudo tee /etc/modules-load.d/kubernetes.conf
-br_netfilter
-ip_vs
-ip_vs_rr
-ip_vs_wrr
-ip_vs_sh
-overlay
-EOF
-
-sudo sysctl --system
-```
-
-### Install containerd (optional runtime)
-
-```bash
-sudo dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
-sudo dnf makecache
-sudo dnf install containerd.io -y
-
-sudo mkdir -p /etc/containerd
-containerd config default | sudo tee /etc/containerd/config.toml
-
-sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
-
-sudo systemctl enable --now containerd
-```
-
-### Reboot
-
-Reboot to apply changes
-
-```bash
-sudo reboot now
-```
-
-### Install NetBox Enterprise
-
-Run through the regular installation [here](nbe-ec-installation.md).
-
-## Optional - Enable SELinux Enforcing
-
-### Install SELinux Tools
-
-```bash
-sudo dnf -y inst
-all setroubleshoot-server setools mcstrans
-```
-
-### Run the suggestions from [the enterprise install for SELinux](./nbe-ec-requirements.md#selinux)
-
-```bash
-export EC_DIR="/var/lib/embedded-cluster"
-export KUBE_DIR="${EC_DIR}/k0s"
-
-# tell SELinux the Cluster directory is owned by Containerd
-sudo semanage fcontext -a -t container_var_lib_t "${EC_DIR}"
-sudo restorecon -R -v "${EC_DIR}"
-
-# additionally, binaries should be allowed to execute
-sudo semanage fcontext -a -t container_runtime_exec_t "${KUBE_DIR}/bin/containerd.*"
-sudo semanage fcontext -a -t container_runtime_exec_t "${KUBE_DIR}/bin/runc"
-sudo restorecon -R -v "${KUBE_DIR}/bin"
-
-# fix permissions for containerd and restrict some folders to read-only
-sudo semanage fcontext -a -t container_var_lib_t "${KUBE_DIR}/containerd(/.*)?"
-sudo semanage fcontext -a -t container_ro_file_t "${KUBE_DIR}/containerd/io.containerd.snapshotter.*/snapshots(/.*)?"
-sudo restorecon -R -v ${KUBE_DIR}/containerd
-```
-
-### Check for errors
-
-Run sealert to look for issues
-
-```bash
-sealert -a /var/log/audit/audit.log
-```
-
-Look for messages like this and run the command suggested based on confidence
-
-!!! note
-    It is important you understand these before enabling and that you can possible be creating security risks if you do not understand what you're enabling.
-
-```log
-SELinux is preventing /usr/sbin/setfiles from 'read, append' accesses on the file /var/lib/embedded-cluster/tmp/tmph3gb9qv1.
-*****  Plugin leaks (86.2 confidence) suggests   *****************************
-If you want to ignore setfiles trying to read append access the tmph3gb9qv1 file, because you believe it should not need this access.
-Then you should report this as a bug.  
-You can generate a local policy module to dontaudit this access.
-Do
-# ausearch -x /usr/sbin/setfiles --raw | audit2allow -D -M my-setfiles
-# semodule -X 300 -i my-setfiles.pp
-*****  Plugin catchall (14.7 confidence) suggests   **************************
-If you believe that setfiles should be allowed read append access on the tmph3gb9qv1 file by default.
-Then you should report this as a bug.
-You can generate a local policy module to allow this access.
-Do
-allow this access for now by executing:
-# ausearch -c 'setfiles' --raw | audit2allow -M my-setfiles
-# semodule -X 300 -i my-setfiles.pp
-Additional Information:
-Source Context                unconfined_u:unconfined_r:setfiles_t:s0-s0:c0.c102
-                              3
-Target Context                unconfined_u:object_r:var_lib_t:s0
-Target Objects                /var/lib/embedded-cluster/tmp/tmph3gb9qv1 [ file ]
-Source                        setfiles
-Source Path                   /usr/sbin/setfiles
-Port                          <Unknown>
-Host                          <Unknown>
-Source RPM Packages           policycoreutils-3.6-2.1.el9.x86_64
-Target RPM Packages           
-SELinux Policy RPM            selinux-policy-targeted-38.1.45-3.el9_5.noarch
-Local Policy RPM              selinux-policy-targeted-38.1.45-3.el9_5.noarch
-Selinux Enabled               True
-Policy Type                   targeted
-Enforcing Mode                Permissive
-Host Name                     tom-testing-rhel
-Platform                      Linux tom-testing-rhel
-                              5.14.0-503.38.1.el9_5.x86_64 #1 SMP
-                              PREEMPT_DYNAMIC Sun Apr 13 22:01:49 EDT 2025
-                              x86_64 x86_64
-Alert Count                   1
-First Seen                    2025-04-24 12:39:11 EDT
-Last Seen                     2025-04-24 12:39:11 EDT
-Local ID                      fb07cf19-dcea-4b68-8990-59a7a5ba57e8
-Raw Audit Messages
-type=AVC msg=audit(1745512751.796:1240): avc:  denied  { read append } for  pid=62558 comm="setfiles" path="/var/lib/embedded-cluster/tmp/tmph3gb9qv1" dev="vda4" ino=209964330 scontext=unconfined_u:unconfined_r:setfiles_t:s0-s0:c0.c1023 tcontext=unconfined_u:object_r:var_lib_t:s0 tclass=file permissive=1
-type=SYSCALL msg=audit(1745512751.796:1240): arch=x86_64 syscall=execve success=yes exit=0 a0=5609fe032210 a1=560a0902dfa0 a2=0 a3=19dd30 items=0 ppid=62146 pid=62558 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts1 ses=1 comm=setfiles exe=/usr/sbin/setfiles subj=unconfined_u:unconfined_r:setfiles_t:s0-s0:c0.c1023 key=(null)ARCH=x86_64 SYSCALL=execve AUID=root UID=root GID=root EUID=root SUID=root FSUID=root EGID=root SGID=root FSGID=root
-Hash: setfiles,setfiles_t,var_lib_t,file,read,append
-```
-
-### Run suggested commands
-
-An example from the above log message would be:
-
-```bash
-ausearch -x /usr/sbin/groupadd --raw | audit2allow -D -M my-groupadd
-semodule -X 300 -i my-groupadd.pp
-```
-
-### Ensure no errors remain
-
-Repeat the above two seteps until the following command returns nothing.
-
-```bash
-sealert -a /var/log/audit/audit.log
-```
-
-### Set Enforcing
-
-```bash
-sudo setenforce Enforcing
-sudo sed -i --follow-symlinks 's/SELINUX=permissive/SELINUX=enforcing/g' /etc/sysconfig/selinux
-```
-
-!!! note
-    Enable Permissive again for any upgrades, plug-ins and changes and run through the sealert and suggestions until no errors remain before re-enabling selinux.
diff --git a/docs/netbox-enterprise/nbe-ec-requirements-ubuntu.md b/docs/netbox-enterprise/nbe-ec-requirements-ubuntu.md
deleted file mode 100644
index 6bcfb554..00000000
--- a/docs/netbox-enterprise/nbe-ec-requirements-ubuntu.md
+++ /dev/null
@@ -1,83 +0,0 @@
----
-tags:
-  - enterprise
-  - netbox
-  - installation
-  - ubuntu
-  - requirements
-  - kubernetes
-  - administration
-versions:
-  netbox_enterprise: "v1.10"
-status: "current"
----
-
-# NetBox Enterprise Requirements for Ubuntu
-
-Ubuntu-specific preparation steps. See the main [requirements document](nbe-ec-requirements.md) for general requirements and special cases.
-
-!!! note "Firewall Configuration"
-    Choose either direct iptables (Required Commands) OR UFW (Optional section), not both, to avoid conflicts.
-
-## Tested Versions
-
-- Ubuntu 22.04 LTS (Jammy Jellyfish)
-- Ubuntu 24.04 LTS (Noble Numbat)
-
-## Required Commands (Direct iptables approach)
-
-```bash
-# Disable swap
-sudo swapoff -a
-sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
-
-# Install iptables-persistent
-sudo apt update && sudo apt install -y iptables-persistent
-
-# Configure pod networking (required for Kubernetes - skip if using UFW)
-sudo iptables -I FORWARD -s 10.244.0.0/17 -d 10.244.128.0/17 -j ACCEPT
-sudo iptables -I OUTPUT -s 10.244.0.0/17 -d 10.244.128.0/17 -j ACCEPT
-sudo iptables -I FORWARD -s 10.244.128.0/17 -d 10.244.0.0/17 -j ACCEPT
-sudo iptables -I OUTPUT -s 10.244.128.0/17 -d 10.244.0.0/17 -j ACCEPT
-sudo netfilter-persistent save
-
-# Load kernel modules (identical to RHEL requirements)
-sudo modprobe br_netfilter ip_vs ip_vs_rr ip_vs_wrr ip_vs_sh overlay
-cat <<EOF | sudo tee /etc/modules-load.d/kubernetes.conf
-br_netfilter
-ip_vs
-ip_vs_rr
-ip_vs_wrr
-ip_vs_sh
-overlay
-EOF
-sudo sysctl --system
-
-# Reboot and proceed with installation
-sudo reboot now
-```
-
-## Optional: If Using UFW
-
-!!! warning "UFW and iptables"
-    If using UFW, apply pod networking rules through UFW instead of direct iptables to avoid conflicts.
-
-```bash
-# Install and configure UFW for Kubernetes ports
-sudo apt install -y ufw
-sudo ufw --force enable
-sudo ufw allow 6443/tcp
-sudo ufw allow 2379:2380/tcp
-sudo ufw allow 10250,10251,10252,10255,5473,10257,10259/tcp
-sudo ufw allow 30000:32767/tcp
-sudo ufw allow 4789/udp
-sudo ufw allow 179/tcp
-
-# Configure pod networking through UFW (instead of direct iptables)
-sudo ufw route allow from 10.244.0.0/17 to 10.244.128.0/17
-sudo ufw route allow from 10.244.128.0/17 to 10.244.0.0/17
-
-sudo ufw reload
-```
-
-After reboot, follow the [installation guide](nbe-ec-installation.md). 
\ No newline at end of file
diff --git a/docs/netbox-enterprise/nbe-ec-requirements.md b/docs/netbox-enterprise/nbe-ec-requirements.md
deleted file mode 100644
index 4219d183..00000000
--- a/docs/netbox-enterprise/nbe-ec-requirements.md
+++ /dev/null
@@ -1,155 +0,0 @@
-# NetBox Enterprise Requirements
-
-### Host system requirements
-
-#### Recommended
-
-The following are the _recommended_ system requirements for a **production** deployment of NetBox Enterprise running two replicas. For larger environments with more replicas, additional resources should be allocated.
-
-- 8 Virtual CPU (vCPU)
-- 24 GB Memory (RAM)
-- 100 GB SSD free disk space in `/var/lib`
-- disable swap if enabled
-
-!!! note
-    For **non-production** deployments of NetBox Enterprise, the _minimum_ system requirements can be reduced to 4 Virtual CPU (vCPU) and 16 GB Memory (RAM). All other requirements remain the same.
-
-### Host operating system
-
-- Linux (Kernel versions 4.3 and above)
-
-!!! note
-    For **Red Hat Enterprise Linux (RHEL)** deployments please see additional requirements [here](./nbe-ec-requirements-rhel.md).
-
-!!! note
-    For **Ubuntu** deployments please see additional requirements [here](./nbe-ec-requirements-ubuntu.md).
-
-### Architecture
-
-- x86-64
-
-## Special Cases for Restricted Environments
-
-In some restricted environments, you will need to take additional steps alongside the [basic installation instructions](./nbe-ec-installation.md).
-
-### Traditional Proxies
-
-As of version 1.6.0, NetBox Enterprise supports installing through proxies using the following configuration.
-
-#### Proxy Configuration
-
-Before you can install, you _must_ configure your proxy to allow the following hostnames:
-
-* **app.enterprise.netboxlabs.com**
-* **get.enterprise.netboxlabs.com**
-* **proxy.enterprise.netboxlabs.com**
-* **registry.enterprise.netboxlabs.com**
-* **replicated.app**
-* **proxy.replicated.com**
-* ***.enterprise.netboxlabs.com**
-
-They are required to access various resources used in the NetBox Enterprise installation.
-
-#### Installation
-
-Once you have configured your proxy to allow access to the NetBox Enterprise hosts, you will need to pass some additional arguments to the NetBox Enterprise installer when following the [basic installation instructions](./nbe-ec-installation.md).
-
-!!! note
-    NetBox Enterprise will _not_ inherit proxy settings from the shell environment, they must be explicitly provided on the installation command-line.
-
-* `--http-proxy <proxy-url>` and `--https-proxy <proxy-url>`
-
-    The proxy url should be a complete URL to reach the proxy. (eg, `http://myhost:8888`)
-
-* `--no-proxy`
-
-    By default, the installer will automatically disable proxying on the internal cluster addresses, as well as the default network interface on your host.
-
-    In some cases, if the installer can't autodetect an interface or if you have a more complicated network, you may need to specify this manually.
-    It should be in the form of a comma-separated list of addresses with CIDR netmasks (`1.2.3.4/32`), or domains (`foo.com`, `*.bar.com`).
-
-### Man-In-The-Middle (MITM) Proxies
-
-If you are using a MITM proxy (ie, one which uses an internal TLS certificate authority for communication with the proxy, rather than directly passing encrypted traffic), you will need an additional option:
-
-* `--private-ca </path/to/private-ca-bundle>`
-
-This will allow the cluster to accept traffic that has been encrypted using your internal CA.
-
-### Firewalld
-
-If you are using Firewalld (commonly found on RHEL installations), you will need to create a zone for the cluster before installing.
-
-1. Determine any host IP addresses or networks (external or otherwise) that might need access to the cluster.
-2. Create a file called `/etc/firewalld/zones/netbox-enterprise.xml` with the following contents:
-
-3. ```xml
-   <?xml version="1.0" encoding="utf-8"?>
-   <zone target="ACCEPT">
-     <short>netbox-enterprise</short>
-     <description>Zone for NetBox Enterprise communication</description>
-     <!-- HOST IP ADDRESSES GO HERE -->
-     <source address="10.244.0.0/17"/>
-     <source address="10.244.128.0/17"/>
-     <port protocol="tcp" port="2380"/>
-     <port protocol="udp" port="4789"/>
-     <port protocol="tcp" port="6443"/>
-     <port protocol="tcp" port="7443"/>
-     <port protocol="tcp" port="9091"/>
-     <port protocol="tcp" port="9443"/>
-     <port protocol="tcp" port="10249"/>
-     <port protocol="tcp" port="10250"/>
-     <port protocol="tcp" port="10256"/>
-     <port protocol="tcp" port="30000"/>
-     <port protocol="tcp" port="22"/>
-   </zone>
-   ```
-
-4. In the spot where it says `<!-- HOST IP ADDRESSES GO HERE -->`, add a `<source />` tag for each host or network you want to allow.
-   For example, if your external IP is `1.2.3.4`, and you also have a private class C network `192.168.123.0`, you would add two lines:
-
-   ```xml
-   <source address="1.2.3.4/32" />
-   <source address="192.168.123.0/24" />
-   ```
-
-5. Run `sudo firewall-cmd --reload` to load the zone configuration.
-
-Then you can follow the [basic installation instructions](./nbe-ec-installation.md) as normal.
-
-### SELinux
-
-There are two steps to installing with SELinux enabled with enforcement turned on.
-
-First, before you install NetBox Enterprise, run:
-
-```bash
-sudo setenforce 0
-```
-
-This will temporarily disable SELinux enforcement until you explicitly reenable it or reboot.
-
-Next, follow the [basic installation instructions](./nbe-ec-installation.md).
-
-Finally, run the following commands to make sure your NetBox Enterprise installation is accessible with enforcement enabled:
-
-```bash
-export EC_DIR="/var/lib/embedded-cluster"
-export KUBE_DIR="${EC_DIR}/k0s"
-
-# tell SELinux the Cluster directory is owned by Containerd
-sudo semanage fcontext -a -t container_var_lib_t "${EC_DIR}"
-sudo restorecon -R -v "${EC_DIR}"
-
-# additionally, binaries should be allowed to execute
-sudo semanage fcontext -a -t container_runtime_exec_t "${KUBE_DIR}/bin/containerd.*"
-sudo semanage fcontext -a -t container_runtime_exec_t "${KUBE_DIR}/bin/runc"
-sudo restorecon -R -v "${KUBE_DIR}/bin"
-
-# fix permissions for containerd and restrict some folders to read-only
-sudo semanage fcontext -a -t container_var_lib_t "${KUBE_DIR}/containerd(/.*)?"
-sudo semanage fcontext -a -t container_ro_file_t "${KUBE_DIR}/containerd/io.containerd.snapshotter.*/snapshots(/.*)?"
-sudo restorecon -R -v ${KUBE_DIR}/containerd
-```
-
-You can then reboot, or run `sudo setenforce 1` to put your system back into a normal state.
diff --git a/docs/netbox-enterprise/nbe-ldap.md b/docs/netbox-enterprise/nbe-ldap.md
deleted file mode 100644
index d18d759f..00000000
--- a/docs/netbox-enterprise/nbe-ldap.md
+++ /dev/null
@@ -1,29 +0,0 @@
-# LDAP Configuration for NetBox Enterprise
-
-1. In the Admin Console for NetBox Enterprise, navigate to the **Config** tab and scroll to the bottom to check **Advanced Settings**
-2. Apply the following into **NetBox Python Configuration Overrides**
-```python
-REMOTE_AUTH_ENABLED = True
-REMOTE_AUTH_BACKEND = 'netbox.authentication.LDAPBackend'
-REMOTE_AUTH_CREATE_USER = True
-```
-3. Apply the following into **NetBox Environment Overrides**, replacing the relevant information specific to your environment
-```python
-AUTH_LDAP_SERVER_URI: "ldaps://xxxxxxx:636"
-AUTH_LDAP_BIND_DN: "cn=administrator,cn=users,DC=nifry,DC=local"
-AUTH_LDAP_BIND_PASSWORD: "xxxxxx"
-AUTH_LDAP_CONNECTION_OPTIONS: "{ ldap.OPT_REFERRALS: 0 }"
-AUTH_LDAP_USER_SEARCH_BASEDN: "cn=users,dc=nifry,dc=local"
-AUTH_LDAP_USER_SEARCH: 'LDAPSearch("cn=users,dc=nifry,dc=local", ldap.SCOPE_SUBTREE, "sAMAccountName=%(user)s")'
-AUTH_LDAP_GROUP_TYPE: "NestedGroupOfNamesType"
-AUTH_LDAP_GROUP_SEARCH_BASEDN: "cn=users,DC=nifry,DC=local"
-AUTH_LDAP_FIND_GROUP_PERMS: true
-AUTH_LDAP_MIRROR_GROUPS: true
-AUTH_LDAP_REQUIRE_GROUP_DN: "CN=Netbox Users,CN=Users,DC=nifry,DC=local"
-AUTH_LDAP_IS_ADMIN_DN: "CN=Netbox Admins,CN=Users,DC=nifry,DC=local"
-AUTH_LDAP_IS_SUPERUSER_DN: "CN=Netbox Superusers,CN=Users,DC=nifry,DC=local"
-AUTH_LDAP_CACHE_TIMEOUT: 0
-LDAP_IGNORE_CERT_ERRORS: true
-```
-4. Here's how it should look in the end
-![LDAP Settings](../images/netbox-enterprise/LDAP/netbox-enterprise-ec-ldap.png)
diff --git a/docs/netbox-enterprise/nbe-migrating.md b/docs/netbox-enterprise/nbe-migrating.md
deleted file mode 100644
index 38fb8acb..00000000
--- a/docs/netbox-enterprise/nbe-migrating.md
+++ /dev/null
@@ -1,75 +0,0 @@
-# Migrating to NetBox Enterprise
-
-Migrating from NetBox open source to NetBox Labs Enterprise is a simple and efficient process. Because NetBox Enterprise is built on the same open source platform, database imports can be completed quickly, enabling a smooth transition.
-
-## Database 
-!!! warning "Compatibility Check"
-    The database being migrated must match the major and minor version of the NetBox deployed with NetBox Enterprise. NetBox Labs support can upgrade older databases on your behalf to assist in the migration process.
-
-### Exporting the Open Source Database 
-1. Use the following command to export your existing NetBox database:
-```shell
-pg_dump --username netbox --password --host localhost netbox > netbox.pgsql 
-```
-!!! info
-    Notify the NetBox Labs team if you used any additional flags for the 'pg_dump' command, or if you exported the data to a different format.
-
-### Importing the Database to NetBox Enterprise
-1. Follow the steps outlined [here](./nbe-backups.md#restoring-your-backups) to import the database into NetBox Enterprise.
-
-
-## Media Files (Optional)
-If images and/or scripts are used in your NetBox, migrate them to the NetBox Labs deployment.
-
-!!! info
-    The steps below assume the default paths used by the open source deployment. If the Media or Scripts locations have been changed with the MEDIA_ROOT or SCRIPTS_ROOT parameters in configuration.py, modify the following steps according to those paths.
-
-### Images
-1. Locate existing images in your open source installation's media root directory:
-```console
-cd /opt/netbox/netbox/ && ls -lR media
-```
-2. Copy and transfer the entire __media__ directory to the NetBox Enterprise server.
-
-3. Enable the NetBox Enterprise shell and identify a running __netbox-enterprise__ pod:
-```console
-sudo ./netbox-enterprise shell
-kubectl get pods -n kotsadm
-```
-```console
-NAME                                                  READY   STATUS      RESTARTS      AGE
-kotsadm-54bbd64487-dkj6t                              1/1     Running     1 (24h ago)   3d18h
-kotsadm-rqlite-0                                      1/1     Running     1 (24h ago)   3d18h
-kurl-proxy-kotsadm-6c7c96b4cb-66p6g                   1/1     Running     2 (24h ago)   3d18h
-netbox-enterprise-backup-labeler-29028255-rxlzm       0/1     Completed   0             39m
-netbox-enterprise-backup-labeler-29028270-7x2w8       0/1     Completed   0             24m
-netbox-enterprise-backup-labeler-29028285-xqqn6       0/1     Completed   0             9m34s
-----> netbox-enterprise-c769578d5-f9kl7               1/1     Running     1 (24h ago)   24h
-netbox-enterprise-housekeeping-29023200-mm7wd         0/1     Completed   0             3d12h
-netbox-enterprise-housekeeping-29024640-9zq9s         0/1     Completed   0             2d12h
-netbox-enterprise-housekeeping-29026080-dxb6j         0/1     Completed   0             36h
-netbox-enterprise-housekeeping-29027520-fj7zk         0/1     Completed   0             12h
-netbox-enterprise-postgres-cluster-instance1-59f8-0   2/2     Running     2 (24h ago)   3d16h
-netbox-enterprise-redis-no-persistence-master-0       2/2     Running     2 (24h ago)   3d17h
-netbox-enterprise-redis-no-persistence-replicas-0     2/2     Running     2 (24h ago)   3d17h
-netbox-enterprise-worker-589cf884c4-z57pg             1/1     Running     2 (24h ago)   3d16h
-pgo-88dccd7c9-w766g                                   1/1     Running     1 (24h ago)   3d17h
-replicated-56c85b569f-b22hm                           1/1     Running     1 (24h ago)   3d16h
-```
-4. Copy the media directory contents into the pod.
-```shell
-kubectl cp -n kotsadm ./media netbox-enterprise-c769578d5-f9kl7:/opt/netbox/netbox
-```
-!!! info "Note"
-    Pod names are randomly generated and need to be identified. If multiple replicas are running, select any pod with the pattern "netbox-enterprise-########-XXXXX"
-
-### Scripts
-
-1. Locate existing scripts in your open source installation's scripts root directory:
-```console
-cd /opt/netbox/netbox/ && ls -lR scripts
-```
-2. Copy and transfer scripts onto an endpoint with access to the NetBox Enterprise web interface.
-3. Login to NetBox Enterprise and navigate to __Customization__ > __Scripts__.
-4. Click __Add__ and upload the first script.
-5. Repeat the previous step for any remaining scripts.
diff --git a/docs/netbox-enterprise/nbe-overview.md b/docs/netbox-enterprise/nbe-overview.md
deleted file mode 100644
index 138ff36d..00000000
--- a/docs/netbox-enterprise/nbe-overview.md
+++ /dev/null
@@ -1,39 +0,0 @@
----
-tags:
-  - enterprise
-  - community
-  - netbox
-  - kubernetes
-  - administration
-  - operations
-  - installation
-  - integration
----
-
-# NetBox Enterprise
-
-## Overview
-
-NetBox Enterprise is a distribution of NetBox built by NetBox Labs for organizations deploying NetBox in their own infrastructure. NetBox Enterprise users gain a simplified installation and upgrade process, as well as advanced features and integrations not available in the community editon of NetBox.
-
-<!--
-## Deployment
-
-NetBox Enterprise supports two different deployment models to best address varying requirements and environments.
--->
-
-The NetBox Enterprise installer provides a fully managed, hands-off installation experience for installing NetBox Enterprise, including deploying and managing an underlying Kubernetes cluster.
-A bare Linux operating system with adequately sized compute resources is the only requirement.
-
-NetBox Enterprise installer deployments deliver all the components and dependencies required to deploy and operate NetBox, including databases, application servers, application load balancers, and object stores.
-This deployment still provides the flexibility of leveraging external components, such as a PostgreSQL cluster or a Redis key-value store.
-
-See the [NetBox Enterprise Installation](nbe-ec-installation.md) guide for more details.
-
-<!--
-### KOTS installation
-
-The Kubernetes Off-The-Shelf (KOTS) installation provides a more customizable installation experience of NetBox Enterprise. For organizations that are  operating their own Kubernetes environments, the KOTS installation enables them to deploy NetBox in their own k8s cluster. KOTS deployments include all the necessary components and take care of all the dependencies just like NetBox Enterprise installer deployments. They also provide the same flexibility in leveraging external components, such as a PostgreSQL cluster or an S3 Object Store.
-
-See the [NetBox Enterprise KOTS Installation](nbe-kots-installation.md) guide for more details.
--->
diff --git a/docs/netbox-enterprise/nbe-release-notes.md b/docs/netbox-enterprise/nbe-release-notes.md
deleted file mode 100644
index a97871f4..00000000
--- a/docs/netbox-enterprise/nbe-release-notes.md
+++ /dev/null
@@ -1,1103 +0,0 @@
-# NetBox Enterprise 1.x Release Notes
-
-### 1.10.1/1.10.2
-
-Minor releases to fix a number of issues with Diode
-and Assurance integration.
-
-#### Bug Fixes
-
-* **db:** move postgresql permissions-setting to an init
-* **diode:** backport runtime-secret script from 1.11
-* **netbox:** make sure netbox refreshes when override hostname changes
-* **redis:** remove redis modules no longer needed for diode
-
-#### Features
-
-* **config:** add hostname override to the KOTS config
-* **config:** show Diode/Assurance license status in KOTS UI
-* **diode:** add deployments and services for diode components in replicated-app.yaml
-
-#### Versions
-
-This release uses the following upstream software:
-
-* NetBox 4.2.9
-* Redis 7.4.2 (if built-in Redis is enabled)
-* PostgreSQL 16.8 (if built-in database is enabled)
-* Diode 1.2.0
-
-#### Plugins
-
-The following plugins are included in this release:
-
-| Plugin | Config Name | Version | Certified |
-| ------ | ----------- | ------- | --------- |
-| netbox-acls | netbox_acls | 1.8.1 | ☑︎ |
-| netbox-bgp | netbox_bgp | 0.15.0 | ☑︎ |
-| netbox-config-diff | netbox_config_diff | 2.9.0 | ☐ |
-| netbox-documents | netbox_documents | 0.7.2 | ☐ |
-| netbox-floorplan-plugin | netbox_floorplan | 0.6.0 | ☑︎ |
-| netbox-interface-synchronization | netbox_interface_synchronization | 4.1.6 | ☐ |
-| netbox-inventory | netbox_inventory | 2.3.0 | ☐ |
-| netbox-lifecycle | netbox_lifecycle | 1.1.5 | ☐ |
-| netbox-plugin-dns | netbox_dns | 1.2.6 | ☑︎ |
-| netbox-qrcode | netbox_qrcode | 0.0.17 | ☑︎ |
-| netbox-reorder-rack | netbox_reorder_rack | 1.1.3 | ☐ |
-| netbox-secrets | netbox_secrets | 2.2.0 | ☑︎ |
-| netbox-topology-views | netbox_topology_views | 4.2.1 | ☑︎ |
-| netbox-validity | validity | 3.1.3 | ☐ |
-| netboxlabs-diode-netbox-plugin | netbox_diode_plugin | 1.1.0 | ☑︎ |
-| netboxlabs-netbox-branching | netbox_branching | 0.5.6 | ☑︎ |
-| slurpit_netbox | slurpit_netbox | 1.1.13 | ☑︎ |
-
-### 1.10.0
-
-This in the first release to include Diode and the
-NetBox Assurance plugin.
-
-#### Features
-
-* *cluster:* import basic diode chart
-* *cluster:* only pull images if necessary
-* *diode:* add diode chart dependency and enable configuration
-* *diode:* add diode reconciler and ingester configuration to netbox enterprise chart
-* *diode:* add proxy to diode image pull
-* *diode:* auto-configure diode plugin in netbox config
-* *diode:* always update the host secret
-* *diode:* bump assurance plugin to 1.0.1
-* *diode:* change diode/hydra to use NBE PostgreSQL
-* *diode:* configure plugin based on ingress hostname
-* *diode:* don't auto-apply changesets if assurance is enabled
-* *diode:* generate a secret containing the external host reliably
-* *diode:* wait for backend to be running before configuring the diode plugin
-* *docker:* switch chart to use production (1.20.0) nbe image
-
-#### Versions
-
-This release uses the following upstream software:
-
-* NetBox 4.2.9
-* Redis 7.4.2 (if built-in Redis is enabled)
-* PostgreSQL 16.8 (if built-in database is enabled)
-* Diode 1.2.0
-
-#### Plugins
-
-The following plugins are included in this release:
-
-| Plugin | Config Name | Version | Certified |
-| ------ | ----------- | ------- | --------- |
-| netbox-acls | netbox_acls | 1.8.1 | ☑︎ |
-| netbox-bgp | netbox_bgp | 0.15.0 | ☑︎ |
-| netbox-config-diff | netbox_config_diff | 2.9.0 | ☐ |
-| netbox-documents | netbox_documents | 0.7.2 | ☐ |
-| netbox-floorplan-plugin | netbox_floorplan | 0.6.0 | ☑︎ |
-| netbox-interface-synchronization | netbox_interface_synchronization | 4.1.6 | ☐ |
-| netbox-inventory | netbox_inventory | 2.3.0 | ☐ |
-| netbox-lifecycle | netbox_lifecycle | 1.1.5 | ☐ |
-| netbox-plugin-dns | netbox_dns | 1.2.6 | ☑︎ |
-| netbox-qrcode | netbox_qrcode | 0.0.17 | ☑︎ |
-| netbox-reorder-rack | netbox_reorder_rack | 1.1.3 | ☐ |
-| netbox-secrets | netbox_secrets | 2.2.0 | ☐ |
-| netbox-topology-views | netbox_topology_views | 4.2.1 | ☑︎ |
-| netbox-validity | validity | 3.1.3 | ☐ |
-| netboxlabs-diode-netbox-plugin | netbox_diode_plugin | 1.0.0 | ☑︎ |
-| netboxlabs-netbox-branching | netbox_branching | 0.5.4 | ☑︎ |
-| slurpit_netbox | slurpit_netbox | 1.1.13 | ☑︎ |
-
-### 1.9.3
-
-Fix a bug that caused failure to download resources
-in airgap and proxied environments. Also includes
-an updated Branching plugin that fixes a number of
-bugs.
-
-#### Bug Fixes
-
-* *cluster:* clean up proxy references for dependencies
-
-#### Versions
-
-This release uses the following upstream software:
-
-* NetBox 4.2.9
-* Redis 7.4.2 (if built-in Redis is enabled)
-* PostgreSQL 16.8 (if built-in database is enabled)
-
-#### Plugins
-
-The following plugins are included in this release:
-
-| Plugin | Config Name | Version | Certified |
-| ------ | ----------- | ------- | --------- |
-| netbox-acls | netbox_acls | 1.8.1 | ☑︎ |
-| netbox-bgp | netbox_bgp | 0.15.0 | ☑︎ |
-| netbox-config-diff | netbox_config_diff | 2.9.0 | ☐ |
-| netbox-documents | netbox_documents | 0.7.2 | ☐ |
-| netbox-floorplan-plugin | netbox_floorplan | 0.6.0 | ☑︎ |
-| netbox-interface-synchronization | netbox_interface_synchronization | 4.1.6 | ☐ |
-| netbox-inventory | netbox_inventory | 2.3.0 | ☐ |
-| netbox-lifecycle | netbox_lifecycle | 1.1.5 | ☐ |
-| netbox-plugin-dns | netbox_dns | 1.2.6 | ☑︎ |
-| netbox-qrcode | netbox_qrcode | 0.0.17 | ☑︎ |
-| netbox-reorder-rack | netbox_reorder_rack | 1.1.3 | ☐ |
-| netbox-secrets | netbox_secrets | 2.2.0 | ☑︎ |
-| netbox-topology-views | netbox_topology_views | 4.2.1 | ☑︎ |
-| netbox-validity | validity | 3.1.3 | ☐ |
-| netboxlabs-diode-netbox-plugin | netbox_diode_plugin | 1.1.0 | ☑︎ |
-| netboxlabs-netbox-branching | netbox_branching | 0.5.6 | ☐ |
-| slurpit_netbox | slurpit_netbox | 1.1.13 | ☑︎ |
-
-### 1.9.2
-
-Updates NetBox to 4.2.9, plus includes an update to
-the cluster software which improves the handling of
-upgrades.
-
-NOTE: This update will upgrade NetBox to 4.2.9.
-If you have custom plugins installed, you will need
-to upgrade to NetBox Enterprise 1.9.2 and then create
-a new wheelhouse that contains plugins compatible
-with 4.2.9.
-
-Please review the [upstream NetBox release
-notes](https://github.com/netbox-community/netbox/releases)
-from your current version through 4.2.9 for a
-complete list of breaking changes, enhancements,
-and bug fixes.
-
-#### Features
-
-* **cluster:** bump to 2.4.0
-* **netbox:** bump to NetBox 4.2.9
-
-#### Versions
-
-This release uses the following upstream software:
-* NetBox 4.2.9
-* Redis 7.4.2 (if built-in Redis is enabled)
-* PostgreSQL 16.8 (if built-in database is enabled)
-
-#### Plugins
-
-The following plugins are included in this release:
-
-| Plugin | Config Name | Version | Certified |
-| ------ | ----------- | ------- | --------- |
-| netbox-acls | netbox_acls | 1.8.1 | ☑︎ |
-| netbox-bgp | netbox_bgp | 0.15.0 | ☑︎ |
-| netbox-config-diff | netbox_config_diff | 2.9.0 | ☐ |
-| netbox-documents | netbox_documents | 0.7.1 | ☐ |
-| netbox-floorplan-plugin | netbox_floorplan | 0.6.0 | ☑︎ |
-| netbox-interface-synchronization | netbox_interface_synchronization | 4.1.6 | ☐ |
-| netbox-inventory | netbox_inventory | 2.3.0 | ☐ |
-| netbox-lifecycle | netbox_lifecycle | 1.1.5 | ☐ |
-| netbox-plugin-dns | netbox_dns | 1.2.6 | ☑︎ |
-| netbox-qrcode | netbox_qrcode | 0.0.17 | ☑︎ |
-| netbox-reorder-rack | netbox_reorder_rack | 1.1.3 | ☐ |
-| netbox-secrets | netbox_secrets | 2.2.0 | ☐ |
-| netbox-topology-views | netbox_topology_views | 4.2.1 | ☑︎ |
-| netbox-validity | validity | 3.1.3 | ☐ |
-| netboxlabs-netbox-branching | netbox_branching | 0.5.4 | ☑︎ |
-| slurpit_netbox | slurpit_netbox | 1.1.13 | ☑︎ |
-
-### 1.9.1
-
-A minor release that contains build process updates
-under the covers, plus the Python XML fixes introduced
-in NetBox Enterprise 1.8.6.
-
-#### Versions
-
-This release uses the following upstream software:
-* NetBox 4.2.6
-* Redis 7.4.2 (if built-in Redis is enabled)
-* PostgreSQL 16.8 (if built-in database is enabled)
-
-#### Plugins
-
-The following plugins are included in this release:
-
-| Plugin | Config Name | Version | Certified |
-| ------ | ----------- | ------- | --------- |
-| netbox-acls | netbox_acls | 1.8.1 | ☑︎ |
-| netbox-bgp | netbox_bgp | 0.15.0 | ☑︎ |
-| netbox-config-diff | netbox_config_diff | 2.9.0 | ☐ |
-| netbox-documents | netbox_documents | 0.7.1 | ☐ |
-| netbox-floorplan-plugin | netbox_floorplan | 0.6.0 | ☑︎ |
-| netbox-interface-synchronization | netbox_interface_synchronization | 4.1.6 | ☐ |
-| netbox-inventory | netbox_inventory | 2.3.0 | ☐ |
-| netbox-lifecycle | netbox_lifecycle | 1.1.5 | ☐ |
-| netbox-plugin-dns | netbox_dns | 1.2.6 | ☑︎ |
-| netbox-qrcode | netbox_qrcode | 0.0.17 | ☑︎ |
-| netbox-reorder-rack | netbox_reorder_rack | 1.1.3 | ☐ |
-| netbox-secrets | netbox_secrets | 2.2.0 | ☐ |
-| netbox-topology-views | netbox_topology_views | 4.2.1 | ☑︎ |
-| netbox-validity | validity | 3.1.3 | ☐ |
-| netboxlabs-netbox-branching | netbox_branching | 0.5.4 | ☑︎ |
-| slurpit_netbox | slurpit_netbox | 1.1.13 | ☑︎ |
-
-### 1.9.0
-
-Updates the embedded NetBox to 4.2.6. Also upgrades
-a number of dependencies to their latest versions,
-adds some extra system consistency validation checks,
-and reduces the number of proxied domains necessary to
-install NetBox Enterprise.
-
-#### Bug Fixes
-
-* **netbox:** update to docker image with pydantic fix (NBE-185)
-* add exit statements for better error handling in configmap-executable.yaml
-* adjust formatting in cronjob-backup-labeler.yaml for consistency
-* remove branch reference for command bar disabling from CI workflow and update Docker image tag
-* remove unnecessary conditional for nodeSelector in cronjob-backup-labeler.yaml
-* replace hardcoded imagePullPolicy with configurable value in cronjob-backup-labeler.yaml
-* restore TTL and backoff limit in backup labeler CronJob configuration
-* update Docker image tag to indicate command bar disabling
-* update imagePullPolicy to 'IfNotPresent' in cronjob-backup-labeler.yaml
-* update system validation query to use jq and change backup labeler image to netboxlabs/nbe-utils:latest
-* update system validation query image version to netboxlabs/nbe-utils:1
-
-#### Features
-
-* add CronJob for netbox sidecar task to do system validation
-* add system validation check CronJob with service account and role binding
-* add TTL and backoff limit to backup labeler CronJob configuration
-* **cluster:** add settings for the improved proxy support
-* **cluster:** update to 2.3.1
-* **config:** create some macros for nbe-utils and replace busybox
-* **deps:** update pgo to 5.7.4, replicated-sdk to 1.5.0
-* increase replicas for postgres instance to improve availability
-* **netbox:** bump to netbox 4.2.6 and ensure versions are correct
-* rename replicas_node_count to node_count for consistency in postgres configuration
-* update backup labeler configuration with TTL and backoff limit
-* update backup labeler to routines labeler and improve system validation error handling
-* update dependencies in Chart.lock for netbox-enterprise
-* update netbox sidecar CronJob to run every 5 minutes and improve error handling
-* update postgres replica configuration to use dynamic node count
-
-#### Versions
-
-This release uses the following upstream software:
-* NetBox 4.2.6
-* Redis 7.4.2 (if built-in Redis is enabled)
-* PostgreSQL 16.8 (if built-in database is enabled)
-
-#### Plugins
-
-The following plugins are included in this release:
-
-| Plugin | Config Name | Version | Certified |
-| ------ | ----------- | ------- | --------- |
-| netbox-acls | netbox_acls | 1.8.1 | ☑︎ |
-| netbox-bgp | netbox_bgp | 0.15.0 | ☑︎ |
-| netbox-config-diff | netbox_config_diff | 2.9.0 | ☐ |
-| netbox-documents | netbox_documents | 0.7.1 | ☐ |
-| netbox-floorplan-plugin | netbox_floorplan | 0.6.0 | ☑︎ |
-| netbox-interface-synchronization | netbox_interface_synchronization | 4.1.6 | ☐ |
-| netbox-inventory | netbox_inventory | 2.3.0 | ☐ |
-| netbox-lifecycle | netbox_lifecycle | 1.1.5 | ☐ |
-| netbox-plugin-dns | netbox_dns | 1.2.6 | ☑︎ |
-| netbox-qrcode | netbox_qrcode | 0.0.17 | ☑︎ |
-| netbox-reorder-rack | netbox_reorder_rack | 1.1.3 | ☐ |
-| netbox-secrets | netbox_secrets | 2.2.0 | ☐ |
-| netbox-topology-views | netbox_topology_views | 4.2.1 | ☑︎ |
-| netbox-validity | validity | 3.1.3 | ☐ |
-| netboxlabs-netbox-branching | netbox_branching | 0.5.4 | ☑︎ |
-
-### 1.8.6
-
-Contains a fix for mismatched XML modules used by
-some 3rd-party plugins.
-
-#### Bug Fixes
-
-* *docker:* ignore low-priority trivy warning about KOTS dep
-* *docker:* make sure lxml and xmlsec match (NBE-193)
-
-#### Versions
-
-This release uses the following upstream software:
-* NetBox 4.1.11
-* Redis 7.4.2 (if built-in database is enabled)
-* PostgreSQL 16.8 (if built-in database is enabled)
-
-#### Plugins
-
-The following plugins are included in this release:
-
-| Plugin | Config Name | Version | Certified |
-| ------ | ----------- | ------- | --------- |
-| nbrisk | nb_risk | 41.0.1 | ☐ |
-| netbox-acls | netbox_acls | 1.7.0 | ☑︎ |
-| netbox-bgp | netbox_bgp | 0.14.0 | ☑︎ |
-| netbox-config-diff | netbox_config_diff | 2.8.0 | ☐ |
-| netbox-documents | netbox_documents | 0.7.0 | ☐ |
-| netbox-floorplan-plugin | netbox_floorplan | 0.5.0 | ☑︎ |
-| netbox-interface-synchronization | netbox_interface_synchronization | 4.1.4 | ☐ |
-| netbox-inventory | netbox_inventory | 2.2.1 | ☐ |
-| netbox-lifecycle | netbox_lifecycle | 1.1.3 | ☐ |
-| netbox-plugin-dns | netbox_dns | 1.1.7 | ☑︎ |
-| netbox-qrcode | netbox_qrcode | 0.0.15 | ☑︎ |
-| netbox-reorder-rack | netbox_reorder_rack | 1.1.3 | ☐ |
-| netbox-secrets | netbox_secrets | 2.1.2 | ☐ |
-| netbox-topology-views | netbox_topology_views | 4.1.0 | ☑︎ |
-| netbox-validity | validity | 3.0.5 | ☐ |
-| netboxlabs-diode-netbox-plugin | netbox_diode_plugin | 0.6.0 | ☑︎ |
-| netboxlabs-netbox-branching | netbox_branching | 0.5.3 | ☑︎ |
-| phonebox-plugin | phonebox_plugin | 0.0.10 | ☐ |
-| slurpit_netbox | slurpit_netbox | 1.0.45 | ☑︎ |
-
-### 1.8.5
-
-Contains a fix for upgrades freezing in some situations.
-
-#### Bug Fixes
-
-* *cluster:* remove unnecessary repository entry in ingress-nginx config
-
-#### Versions
-
-This release uses the following upstream software:
-* NetBox 4.1.11
-* Redis 7.4.2 (if built-in database is enabled)
-* PostgreSQL 16.8 (if built-in database is enabled)
-
-#### Plugins
-
-The following plugins are included in this release:
-
-| Plugin | Config Name | Version | Certified |
-| ------ | ----------- | ------- | --------- |
-| nbrisk | nb_risk | 41.0.1 | ☐ |
-| netbox-acls | netbox_acls | 1.7.0 | ☑︎ |
-| netbox-bgp | netbox_bgp | 0.14.0 | ☑︎ |
-| netbox-config-diff | netbox_config_diff | 2.8.0 | ☐ |
-| netbox-documents | netbox_documents | 0.7.0 | ☐ |
-| netbox-floorplan-plugin | netbox_floorplan | 0.5.0 | ☑︎ |
-| netbox-interface-synchronization | netbox_interface_synchronization | 4.1.4 | ☐ |
-| netbox-inventory | netbox_inventory | 2.2.1 | ☐ |
-| netbox-lifecycle | netbox_lifecycle | 1.1.3 | ☐ |
-| netbox-plugin-dns | netbox_dns | 1.1.7 | ☑︎ |
-| netbox-qrcode | netbox_qrcode | 0.0.15 | ☑︎ |
-| netbox-reorder-rack | netbox_reorder_rack | 1.1.3 | ☐ |
-| netbox-secrets | netbox_secrets | 2.1.2 | ☐ |
-| netbox-topology-views | netbox_topology_views | 4.1.0 | ☑︎ |
-| netbox-validity | validity | 3.0.5 | ☐ |
-| netboxlabs-diode-netbox-plugin | netbox_diode_plugin | 0.6.0 | ☑︎ |
-| netboxlabs-netbox-branching | netbox_branching | 0.5.3 | ☑︎ |
-| phonebox-plugin | phonebox_plugin | 0.0.10 | ☐ |
-| slurpit_netbox | slurpit_netbox | 1.0.45 | ☑︎ |
-
-### 1.8.4
-
-Provides a number of updates to custom plugin
-installation, as well as other small enhancements
-and bug fixes, included in the 1.7.x series, most
-notably the security fix for the `ingress-nginx`
-controller (CVE-2025-1974).
-
-#### Bug Fixes
-
-* *cluster:* properly show "ready" in restore mode
-* *cluster:* remove the admission controller from status checks
-* *cluster:* repair some shellcheck issues, remove vestigial config
-* *netbox:* a few small cosmetic fixes to plugin install
-* *netbox:* improve plugin installation issues for custom tarballs
-
-#### Versions
-
-This release uses the following upstream software:
-* NetBox 4.1.11
-* Redis 7.4.2 (if built-in database is enabled)
-* PostgreSQL 16.8 (if built-in database is enabled)
-
-#### Plugins
-
-The following plugins are included in this release:
-
-| Plugin | Config Name | Version | Certified |
-| ------ | ----------- | ------- | --------- |
-| nbrisk | nb_risk | 41.0.1 | ☐ |
-| netbox-acls | netbox_acls | 1.7.0 | ☑︎ |
-| netbox-bgp | netbox_bgp | 0.14.0 | ☑︎ |
-| netbox-config-diff | netbox_config_diff | 2.8.0 | ☐ |
-| netbox-documents | netbox_documents | 0.7.0 | ☐ |
-| netbox-floorplan-plugin | netbox_floorplan | 0.5.0 | ☑︎ |
-| netbox-interface-synchronization | netbox_interface_synchronization | 4.1.4 | ☐ |
-| netbox-inventory | netbox_inventory | 2.2.1 | ☐ |
-| netbox-lifecycle | netbox_lifecycle | 1.1.3 | ☐ |
-| netbox-plugin-dns | netbox_dns | 1.1.7 | ☑︎ |
-| netbox-qrcode | netbox_qrcode | 0.0.15 | ☑︎ |
-| netbox-reorder-rack | netbox_reorder_rack | 1.1.3 | ☐ |
-| netbox-secrets | netbox_secrets | 2.1.2 | ☐ |
-| netbox-topology-views | netbox_topology_views | 4.1.0 | ☑︎ |
-| netbox-validity | validity | 3.0.5 | ☐ |
-| netboxlabs-diode-netbox-plugin | netbox_diode_plugin | 0.6.0 | ☑︎ |
-| netboxlabs-netbox-branching | netbox_branching | 0.5.3 | ☑︎ |
-| phonebox-plugin | phonebox_plugin | 0.0.10 | ☐ |
-| slurpit_netbox | slurpit_netbox | 1.0.45 | ☑︎ |
-
-### 1.8.3
-
-Provides a number of updates to custom plugin
-installation, as well as other small enhancements
-and bug fixes, included in the 1.7.x series, most
-notably the security fix for the `ingress-nginx`
-controller (CVE-2025-1974).
-
-#### Bug Fixes
-
-* *cluster:* properly show "ready" in restore mode
-* *netbox:* a few small cosmetic fixes to plugin install
-* repair some shellcheck issues, remove vestigial config
-
-#### Features
-
-* *cluster:* make a label to tag pods supporting upload
-
-#### Versions
-
-This release uses the following upstream software:
-* NetBox 4.1.11
-* Redis 7.4.2 (if built-in database is enabled)
-* PostgreSQL 16.6 (if built-in database is enabled)
-
-#### Plugins
-
-The following plugins are included in this release:
-
-| Plugin | Config Name | Version | Certified |
-| ------ | ----------- | ------- | --------- |
-| nbrisk | nb_risk | 41.0.1 | ☐ |
-| netbox-acls | netbox_acls | 1.7.0 | ☑︎ |
-| netbox-bgp | netbox_bgp | 0.14.0 | ☑︎ |
-| netbox-config-diff | netbox_config_diff | 2.8.0 | ☐ |
-| netbox-documents | netbox_documents | 0.7.0 | ☐ |
-| netbox-floorplan-plugin | netbox_floorplan | 0.5.0 | ☑︎ |
-| netbox-interface-synchronization | netbox_interface_synchronization | 4.1.4 | ☐ |
-| netbox-inventory | netbox_inventory | 2.2.1 | ☐ |
-| netbox-lifecycle | netbox_lifecycle | 1.1.3 | ☐ |
-| netbox-plugin-dns | netbox_dns | 1.1.7 | ☑︎ |
-| netbox-qrcode | netbox_qrcode | 0.0.15 | ☑︎ |
-| netbox-reorder-rack | netbox_reorder_rack | 1.1.3 | ☐ |
-| netbox-secrets | netbox_secrets | 2.1.2 | ☐ |
-| netbox-topology-views | netbox_topology_views | 4.1.0 | ☑︎ |
-| netbox-validity | validity | 3.0.5 | ☐ |
-| netboxlabs-diode-netbox-plugin | netbox_diode_plugin | 0.6.0 | ☑︎ |
-| netboxlabs-netbox-branching | netbox_branching | 0.5.3 | ☑︎ |
-| phonebox-plugin | phonebox_plugin | 0.0.10 | ☐ |
-| slurpit_netbox | slurpit_netbox | 1.0.45 | ☑︎ |
-
-### 1.8.1
-
-Fixes user creation, password validation, and group/SSO
-issues in NetBox.
-
-#### Bug Fixes
-
-* *netbox:* use proper import location of the OWASP validator
-* *docker:* fix nbce-common install, remove deprecated nbc_auth
-* *docker:* make sure nbc_auth_extensions are in the right place
-
-#### Versions
-
-This release uses the following upstream software:
-* NetBox 4.1.11
-* Redis 7.4.2 (if built-in database is enabled)
-* PostgreSQL 16.6 (if built-in database is enabled)
-
-#### Plugins
-
-The following plugins are included in this release:
-
-| Plugin | Config Name | Version | Certified |
-| ------ | ----------- | ------- | --------- |
-| nbrisk | nb_risk | 41.0.1 | ☐ |
-| netbox-acls | netbox_acls | 1.7.0 | ☑︎ |
-| netbox-bgp | netbox_bgp | 0.14.0 | ☑︎ |
-| netbox-config-diff | netbox_config_diff | 2.8.0 | ☐ |
-| netbox-documents | netbox_documents | 0.7.0 | ☐ |
-| netbox-floorplan-plugin | netbox_floorplan | 0.5.0 | ☑︎ |
-| netbox-interface-synchronization | netbox_interface_synchronization | 4.1.4 | ☐ |
-| netbox-inventory | netbox_inventory | 2.2.1 | ☐ |
-| netbox-lifecycle | netbox_lifecycle | 1.1.3 | ☐ |
-| netbox-plugin-dns | netbox_dns | 1.1.7 | ☑︎ |
-| netbox-qrcode | netbox_qrcode | 0.0.15 | ☑︎ |
-| netbox-reorder-rack | netbox_reorder_rack | 1.1.3 | ☐ |
-| netbox-secrets | netbox_secrets | 2.1.2 | ☐ |
-| netbox-topology-views | netbox_topology_views | 4.1.0 | ☑︎ |
-| netbox-validity | validity | 3.0.5 | ☐ |
-| netboxlabs-diode-netbox-plugin | netbox_diode_plugin | 0.6.0 | ☑︎ |
-| netboxlabs-netbox-branching | netbox_branching | 0.5.3 | ☑︎ |
-| phonebox-plugin | phonebox_plugin | 0.0.10 | ☐ |
-| slurpit_netbox | slurpit_netbox | 1.0.45 | ☑︎ |
-
-### 1.8.0
-
-Improves logging in the NetBox containers, and adds support
-for uploading custom plugins.
-
-#### Bug Fixes
-
-* *cluster:* fixed a few pod label macros
-* *config:* feedback - use bash for extra script safety
-* *config:* remove vestigial validation mount
-
-#### Features
-
-* *config:* adding log fixing branch to the CI workflow to create a release in Replicated
-* *config:* allow uploading plugins for `pip install`
-
-#### Versions
-
-This release uses the following upstream software:
-* NetBox 4.1.11
-* Redis 7.4.2 (if built-in database is enabled)
-* PostgreSQL 16.6 (if built-in database is enabled)
-
-#### Plugins
-
-The following plugins are included in this release:
-
-| Plugin | Config Name | Version | Certified |
-| ------ | ----------- | ------- | --------- |
-| nbrisk | nb_risk | 41.0.1 | ☐ |
-| netbox-acls | netbox_acls | 1.7.0 | ☑︎ |
-| netbox-bgp | netbox_bgp | 0.14.0 | ☑︎ |
-| netbox-config-diff | netbox_config_diff | 2.8.0 | ☐ |
-| netbox-documents | netbox_documents | 0.7.0 | ☐ |
-| netbox-floorplan-plugin | netbox_floorplan | 0.5.0 | ☑︎ |
-| netbox-interface-synchronization | netbox_interface_synchronization | 4.1.4 | ☐ |
-| netbox-inventory | netbox_inventory | 2.2.1 | ☐ |
-| netbox-lifecycle | netbox_lifecycle | 1.1.3 | ☐ |
-| netbox-plugin-dns | netbox_dns | 1.1.7 | ☑︎ |
-| netbox-qrcode | netbox_qrcode | 0.0.15 | ☑︎ |
-| netbox-reorder-rack | netbox_reorder_rack | 1.1.3 | ☐ |
-| netbox-secrets | netbox_secrets | 2.1.2 | ☐ |
-| netbox-topology-views | netbox_topology_views | 4.1.0 | ☑︎ |
-| netbox-validity | validity | 3.0.5 | ☐ |
-| netboxlabs-diode-netbox-plugin | netbox_diode_plugin | 0.6.0 | ☑︎ |
-| netboxlabs-netbox-branching | netbox_branching | 0.5.3 | ☑︎ |
-| phonebox-plugin | phonebox_plugin | 0.0.10 | ☐ |
-| slurpit_netbox | slurpit_netbox | 1.0.45 | ☑︎ |
-
-### 1.7.6
-
-Contains a fix for incorrect permissions in the media folder
-after restore from backup.
-
-#### Bug Fixes
-
-* *cluster:* remove the admission controller from status checks
-* *netbox:* make sure volume permissions are correct
-
-#### Versions
-
-This release uses the following upstream software:
-* NetBox 4.1.11
-* Redis 7.4.2 (if built-in database is enabled)
-* PostgreSQL 16.8 (if built-in database is enabled)
-
-#### Plugins
-
-The following plugins are included in this release:
-
-| Plugin | Config Name | Version | Certified |
-| ------ | ----------- | ------- | --------- |
-| nbrisk | nb_risk | 41.0.1 | ☐ |
-| netbox-acls | netbox_acls | 1.7.0 | ☑︎ |
-| netbox-bgp | netbox_bgp | 0.14.0 | ☑︎ |
-| netbox-config-diff | netbox_config_diff | 2.8.0 | ☐ |
-| netbox-documents | netbox_documents | 0.7.0 | ☐ |
-| netbox-floorplan-plugin | netbox_floorplan | 0.5.0 | ☑︎ |
-| netbox-interface-synchronization | netbox_interface_synchronization | 4.1.4 | ☐ |
-| netbox-inventory | netbox_inventory | 2.2.1 | ☐ |
-| netbox-lifecycle | netbox_lifecycle | 1.1.3 | ☐ |
-| netbox-plugin-dns | netbox_dns | 1.1.7 | ☑︎ |
-| netbox-qrcode | netbox_qrcode | 0.0.15 | ☑︎ |
-| netbox-reorder-rack | netbox_reorder_rack | 1.1.3 | ☐ |
-| netbox-secrets | netbox_secrets | 2.1.2 | ☐ |
-| netbox-topology-views | netbox_topology_views | 4.1.0 | ☑︎ |
-| netbox-validity | validity | 3.0.5 | ☐ |
-| netboxlabs-diode-netbox-plugin | netbox_diode_plugin | 0.6.0 | ☑︎ |
-| netboxlabs-netbox-branching | netbox_branching | 0.5.3 | ☑︎ |
-| phonebox-plugin | phonebox_plugin | 0.0.10 | ☐ |
-| slurpit_netbox | slurpit_netbox | 1.0.45 | ☑︎ |
-
-### 1.7.5
-
-Contains a security fix for the `ingress-nginx` controller
-(CVE-2025-1974).
-
-#### Bug Fixes
-
-* *cluster:* disable ingress-nginx admission controller
-
-#### Versions
-
-This release uses the following upstream software:
-* NetBox 4.1.11
-* Redis 7.4.2 (if built-in database is enabled)
-* PostgreSQL 16.6 (if built-in database is enabled)
-
-#### Plugins
-
-The following plugins are included in this release:
-
-| Plugin | Config Name | Version | Certified |
-| ------ | ----------- | ------- | --------- |
-| nbrisk | nb_risk | 41.0.1 | ☐ |
-| netbox-acls | netbox_acls | 1.7.0 | ☑︎ |
-| netbox-bgp | netbox_bgp | 0.14.0 | ☑︎ |
-| netbox-config-diff | netbox_config_diff | 2.8.0 | ☐ |
-| netbox-documents | netbox_documents | 0.7.0 | ☐ |
-| netbox-floorplan-plugin | netbox_floorplan | 0.5.0 | ☑︎ |
-| netbox-interface-synchronization | netbox_interface_synchronization | 4.1.4 | ☐ |
-| netbox-inventory | netbox_inventory | 2.2.1 | ☐ |
-| netbox-lifecycle | netbox_lifecycle | 1.1.3 | ☐ |
-| netbox-plugin-dns | netbox_dns | 1.1.7 | ☑︎ |
-| netbox-qrcode | netbox_qrcode | 0.0.15 | ☑︎ |
-| netbox-reorder-rack | netbox_reorder_rack | 1.1.3 | ☐ |
-| netbox-secrets | netbox_secrets | 2.1.2 | ☐ |
-| netbox-topology-views | netbox_topology_views | 4.1.0 | ☑︎ |
-| netbox-validity | validity | 3.0.5 | ☐ |
-| netboxlabs-diode-netbox-plugin | netbox_diode_plugin | 0.6.0 | ☑︎ |
-| netboxlabs-netbox-branching | netbox_branching | 0.5.2 | ☑︎ |
-| phonebox-plugin | phonebox_plugin | 0.0.10 | ☐ |
-| slurpit_netbox | slurpit_netbox | 1.0.45 | ☑︎ |
-
-### 1.7.4
-
-Fix missing authentication plugins for group and SSO configs.
-
-#### Bug Fixes
-
-* *docker:* make sure nbc_auth_extensions are in the right place
-
-#### Versions
-
-This release uses the following upstream software:
-* NetBox 4.1.11
-* Redis 7.4.2 (if built-in database is enabled)
-* PostgreSQL 16.6 (if built-in database is enabled)
-
-#### Plugins
-
-The following plugins are included in this release:
-
-| Plugin | Config Name | Version | Certified |
-| ------ | ----------- | ------- | --------- |
-| nbrisk | nb_risk | 41.0.1 | ☐ |
-| netbox-acls | netbox_acls | 1.7.0 | ☑︎ |
-| netbox-bgp | netbox_bgp | 0.14.0 | ☑︎ |
-| netbox-config-diff | netbox_config_diff | 2.8.0 | ☐ |
-| netbox-documents | netbox_documents | 0.7.0 | ☐ |
-| netbox-floorplan-plugin | netbox_floorplan | 0.5.0 | ☑︎ |
-| netbox-interface-synchronization | netbox_interface_synchronization | 4.1.4 | ☐ |
-| netbox-inventory | netbox_inventory | 2.2.1 | ☐ |
-| netbox-lifecycle | netbox_lifecycle | 1.1.3 | ☐ |
-| netbox-plugin-dns | netbox_dns | 1.1.7 | ☑︎ |
-| netbox-qrcode | netbox_qrcode | 0.0.15 | ☑︎ |
-| netbox-reorder-rack | netbox_reorder_rack | 1.1.3 | ☐ |
-| netbox-secrets | netbox_secrets | 2.1.2 | ☐ |
-| netbox-topology-views | netbox_topology_views | 4.1.0 | ☑︎ |
-| netbox-validity | validity | 3.0.5 | ☐ |
-| netboxlabs-diode-netbox-plugin | netbox_diode_plugin | 0.6.0 | ☑︎ |
-| netboxlabs-netbox-branching | netbox_branching | 0.5.3 | ☑︎ |
-| phonebox-plugin | phonebox_plugin | 0.0.10 | ☐ |
-| slurpit_netbox | slurpit_netbox | 1.0.45 | ☑︎ |
-
-### 1.7.3
-
-Re-release of 1.7.2 with additional password validator fixes,
-plus reverting to a previous working redis chart.
-
-#### Bug Fixes
-
-* *netbox:* use proper import location of the OWASP validator
-
-#### Versions
-
-This release uses the following upstream software:
-* NetBox 4.1.11
-* Redis 7.4.2 (if built-in database is enabled)
-* PostgreSQL 16.6 (if built-in database is enabled)
-
-#### Plugins
-
-The following plugins are included in this release:
-
-| Plugin | Config Name | Version | Certified |
-| ------ | ----------- | ------- | --------- |
-| nbrisk | nb_risk | 41.0.1 | ☐ |
-| netbox-acls | netbox_acls | 1.7.0 | ☑︎ |
-| netbox-bgp | netbox_bgp | 0.14.0 | ☑︎ |
-| netbox-config-diff | netbox_config_diff | 2.8.0 | ☐ |
-| netbox-documents | netbox_documents | 0.7.0 | ☐ |
-| netbox-floorplan-plugin | netbox_floorplan | 0.5.0 | ☑︎ |
-| netbox-interface-synchronization | netbox_interface_synchronization | 4.1.4 | ☐ |
-| netbox-inventory | netbox_inventory | 2.2.1 | ☐ |
-| netbox-lifecycle | netbox_lifecycle | 1.1.3 | ☐ |
-| netbox-plugin-dns | netbox_dns | 1.1.7 | ☑︎ |
-| netbox-qrcode | netbox_qrcode | 0.0.15 | ☑︎ |
-| netbox-reorder-rack | netbox_reorder_rack | 1.1.3 | ☐ |
-| netbox-secrets | netbox_secrets | 2.1.2 | ☐ |
-| netbox-topology-views | netbox_topology_views | 4.1.0 | ☑︎ |
-| netbox-validity | validity | 3.0.5 | ☐ |
-| netboxlabs-diode-netbox-plugin | netbox_diode_plugin | 0.6.0 | ☑︎ |
-| netboxlabs-netbox-branching | netbox_branching | 0.5.3 | ☑︎ |
-| phonebox-plugin | phonebox_plugin | 0.0.10 | ☐ |
-| slurpit_netbox | slurpit_netbox | 1.0.45 | ☑︎ |
-
-### 1.7.2
-
-Fixes a bug where the custom password validator was
-missing.
-
-#### Bug Fixes
-
-* *docker:* fix nbce-common install, remove deprecated nbc_auth
-
-#### Versions
-
-This release uses the following upstream software:
-* NetBox 4.1.11
-* Redis 7.4.2 (if built-in database is enabled)
-* PostgreSQL 16.6 (if built-in database is enabled)
-
-#### Plugins
-
-The following plugins are included in this release:
-
-| Plugin | Config Name | Version | Certified |
-| ------ | ----------- | ------- | --------- |
-| nbrisk | nb_risk | 41.0.1 | ☐ |
-| netbox-acls | netbox_acls | 1.7.0 | ☑︎ |
-| netbox-bgp | netbox_bgp | 0.14.0 | ☑︎ |
-| netbox-config-diff | netbox_config_diff | 2.8.0 | ☐ |
-| netbox-documents | netbox_documents | 0.7.0 | ☐ |
-| netbox-floorplan-plugin | netbox_floorplan | 0.5.0 | ☑︎ |
-| netbox-interface-synchronization | netbox_interface_synchronization | 4.1.4 | ☐ |
-| netbox-inventory | netbox_inventory | 2.2.1 | ☐ |
-| netbox-lifecycle | netbox_lifecycle | 1.1.3 | ☐ |
-| netbox-plugin-dns | netbox_dns | 1.1.7 | ☑︎ |
-| netbox-qrcode | netbox_qrcode | 0.0.15 | ☑︎ |
-| netbox-reorder-rack | netbox_reorder_rack | 1.1.3 | ☐ |
-| netbox-secrets | netbox_secrets | 2.1.2 | ☐ |
-| netbox-topology-views | netbox_topology_views | 4.1.0 | ☑︎ |
-| netbox-validity | validity | 3.0.5 | ☐ |
-| netboxlabs-diode-netbox-plugin | netbox_diode_plugin | 0.6.0 | ☑︎ |
-| netboxlabs-netbox-branching | netbox_branching | 0.5.3 | ☑︎ |
-| phonebox-plugin | phonebox_plugin | 0.0.10 | ☐ |
-| slurpit_netbox | slurpit_netbox | 1.0.45 | ☑︎ |
-
-### 1.7.1
-
-Fixes a bug in downloading the ingress Helm chart when
-using a proxy for installation.
-
-#### Bug Fixes
-
-* *cluster:* use the proxy to download the ingress chart
-
-#### Versions
-
-This release uses the following upstream software:
-* NetBox 4.1.11
-* Redis 7.4.2 (if built-in database is enabled)
-* PostgreSQL 16.6 (if built-in database is enabled)
-
-#### Plugins
-
-The following plugins are included in this release:
-
-| Plugin | Config Name | Version | Certified |
-| ------ | ----------- | ------- | --------- |
-| nbrisk | nb_risk | 41.0.1 | ☐ |
-| netbox-acls | netbox_acls | 1.7.0 | ☑︎ |
-| netbox-bgp | netbox_bgp | 0.14.0 | ☑︎ |
-| netbox-config-diff | netbox_config_diff | 2.8.0 | ☐ |
-| netbox-documents | netbox_documents | 0.7.0 | ☐ |
-| netbox-floorplan-plugin | netbox_floorplan | 0.5.0 | ☑︎ |
-| netbox-interface-synchronization | netbox_interface_synchronization | 4.1.4 | ☐ |
-| netbox-inventory | netbox_inventory | 2.2.1 | ☐ |
-| netbox-lifecycle | netbox_lifecycle | 1.1.3 | ☐ |
-| netbox-plugin-dns | netbox_dns | 1.1.7 | ☑︎ |
-| netbox-qrcode | netbox_qrcode | 0.0.15 | ☑︎ |
-| netbox-reorder-rack | netbox_reorder_rack | 1.1.3 | ☐ |
-| netbox-secrets | netbox_secrets | 2.1.2 | ☐ |
-| netbox-topology-views | netbox_topology_views | 4.1.0 | ☑︎ |
-| netbox-validity | validity | 3.0.5 | ☐ |
-| netboxlabs-diode-netbox-plugin | netbox_diode_plugin | 0.6.0 | ☑︎ |
-| netboxlabs-netbox-branching | netbox_branching | 0.5.2 | ☑︎ |
-| phonebox-plugin | phonebox_plugin | 0.0.10 | ☐ |
-| slurpit_netbox | slurpit_netbox | 1.0.45 | ☑︎ |
-
-### 1.7.0
-
-Updates the embedded NetBox to 4.1.11. Also upgrades
-the cluster software, which brings many bug fixes and
-features, including better preflight checks, and
-a direct link to the NetBox UI from the admin console.
-
-#### Features
-
-* *cluster:* update to 1.19.0
-* *cluster:* add a link to the NetBox UI from the admin console
-* *deps:* update to NetBox 4.1.11 + latest NetBox chart
-
-#### Versions
-
-This release uses the following upstream software:
-* NetBox 4.1.11
-* Redis 7.4.2
-* PostgreSQL 16.6 (if built-in database is enabled)
-
-#### Plugins
-
-The following plugins are included in this release:
-
-| Plugin | Config Name | Version | Certified |
-| ------ | ----------- | ------- | --------- |
-| nbrisk | nb_risk | 41.0.1 | ☐ |
-| netbox-acls | netbox_acls | 1.7.0 | ☑︎ |
-| netbox-bgp | netbox_bgp | 0.14.0 | ☑︎ |
-| netbox-config-diff | netbox_config_diff | 2.8.0 | ☐ |
-| netbox-documents | netbox_documents | 0.7.0 | ☐ |
-| netbox-floorplan-plugin | netbox_floorplan | 0.5.0 | ☑︎ |
-| netbox-interface-synchronization | netbox_interface_synchronization | 4.1.4 | ☐ |
-| netbox-inventory | netbox_inventory | 2.2.1 | ☐ |
-| netbox-lifecycle | netbox_lifecycle | 1.1.3 | ☐ |
-| netbox-plugin-dns | netbox_dns | 1.1.7 | ☑︎ |
-| netbox-qrcode | netbox_qrcode | 0.0.15 | ☑︎ |
-| netbox-reorder-rack | netbox_reorder_rack | 1.1.3 | ☐ |
-| netbox-secrets | netbox_secrets | 2.1.2 | ☐ |
-| netbox-topology-views | netbox_topology_views | 4.1.0 | ☑︎ |
-| netbox-validity | validity | 3.0.5 | ☐ |
-| netboxlabs-diode-netbox-plugin | netbox_diode_plugin | 0.6.0 | ☑︎ |
-| netboxlabs-netbox-branching | netbox_branching | 0.5.2 | ☑︎ |
-| phonebox-plugin | phonebox_plugin | 0.0.10 | ☐ |
-| slurpit_netbox | slurpit_netbox | 1.0.45 | ☑︎ |
-
-### 1.6.5
-
-Fixes a small bug that would cause the admin console to
-improperly display an error on upgrade. Also updates
-a few dependencies.
-
-#### Bug Fixes
-
-* *cluster:* move ingress back to `ingress-nginx` namespace
-
-#### Features
-
-* *deps:* bump to latest docker image + current plugins
-* *deps:* update bitnami-common and netbox oss charts
-* *netbox:* update to latest 4.0.x-compatible plugins
-
-#### Plugins
-
-The following plugins are included in this release:
-
-| Plugin | Version | Certified |
-| ------ | ------- | --------- |
-| nbrisk | 41.0.1 | ☐ |
-| netbox-acls | 1.7.0 | ☑︎ |
-| netbox-bgp | 0.14.0 | ☑︎ |
-| netbox-config-diff | 2.7.0 | ☐ |
-| netbox-documents | 0.7.0 | ☐ |
-| netbox-floorplan-plugin | 0.5.0 | ☑︎ |
-| netbox-interface-synchronization | 4.1.4 | ☐ |
-| netbox-inventory | 2.1.0 | ☐ |
-| netbox-lifecycle | 1.1.3 | ☐ |
-| netbox-plugin-dns | 1.1.6 | ☑︎ |
-| netbox-qrcode | 0.0.15 | ☑︎ |
-| netbox-secrets | 2.1.0 | ☐ |
-| netbox-topology-views | 4.1.0 | ☑︎ |
-| netbox-validity | 3.0.5 | ☐ |
-| netboxlabs-diode-netbox-plugin | 0.6.0 | ☑︎ |
-| netboxlabs-netbox-branching | 0.5.2 | ☑︎ |
-| phonebox-plugin | 0.0.10 | ☐ |
-| slurpit_netbox | 1.0.43 | ☑︎ |
-
-### 1.6.4
-
-Disable unnecessary Redis persistence and redundant PostgreSQL backups,
-plus fix an issue with file upload limits and missing static content
-from enabled plugins.
-
-NetBox Enterprise 1.6.4 includes NetBox 4.1.7, and is anticipated to
-be a release candidate for stable.
-
-#### Plugins
-
-The following plugins are included in this release:
-
-| Plugin | Version | Certified |
-| ------ | ------- | --------- |
-| nbrisk | 41.0.1 | ☐ |
-| netbox-acls | 1.7.0 | ☑︎ |
-| netbox-bgp | 0.14.0 | ☑︎ |
-| netbox-config-diff | 2.7.0 | ☐ |
-| netbox-documents | 0.7.0 | ☐ |
-| netbox-floorplan-plugin | 0.5.0 | ☑︎ |
-| netbox-interface-synchronization | 4.1.4 | ☐ |
-| netbox-inventory | 2.1.0 | ☐ |
-| netbox-lifecycle | 1.1.3 | ☐ |
-| netbox-plugin-dns | 1.1.6 | ☑︎ |
-| netbox-qrcode | 0.0.15 | ☑︎ |
-| netbox-secrets | 2.1.0 | ☐ |
-| netbox-topology-views | 4.1.0 | ☑︎ |
-| netbox-validity | 3.0.5 | ☐ |
-| netboxlabs-diode-netbox-plugin | 0.6.0 | ☑︎ |
-| netboxlabs-netbox-branching | 0.5.2 | ☑︎ |
-| phonebox-plugin | 0.0.10 | ☐ |
-| slurpit_netbox | 1.0.43 | ☑︎ |
-
-### 1.6.3
-
-Just a few small bug fixes, mostly related to internal changes.
-Also contains dependency updates.
-
-
-### 1.6.2
-
-Primarily internal and build-related changes.
-No new features.
-
-### 1.6.1
-
-Fixes a number of bugs related to file uploads and proxy environments.
-
-### 1.6.0
-
-Adds the changes plugin by default, and upgrades NetBox to 4.1.7.
-Fixes some small bugs in plugin initialization and proxied installs.
-
-### 1.5.0
-
-The 1.5.x series was released internally for development
-testing of upgrades to NetBox 4.1 and branching plugin inclusion.
-
-### 1.4.2
-
-A re-release of 1.4.1 with a fix that makes sure plugin versions
-that are only compatible with NetBox 4.1 are not included.
-
-#### Plugins
-
-The following plugins are included in this release:
-
-| Plugin | Version | Certified |
-| ------ | ------- | --------- |
-| nbrisk | 40.0.1 | ☐ |
-| netbox-acls | 1.6.1 | ☐ |
-| netbox-bgp | 0.13.3 | ☑︎ |
-| netbox-config-diff | 2.7.0 | ☐ |
-| netbox-documents | 0.7.0 | ☐ |
-| netbox-floorplan-plugin | 0.4.1 | ☑︎ |
-| netbox-interface-synchronization | 4.1.4 | ☐ |
-| netbox-inventory | 2.0.2 | ☐ |
-| netbox-lifecycle | 1.0.4 | ☐ |
-| netbox-plugin-dns | 1.1.5 | ☑︎ |
-| netbox-qrcode | 0.0.14 | ☑︎ |
-| netbox-reorder-rack | 1.1.3 | ☐ |
-| netbox-secrets | 2.0.3 | ☐ |
-| netbox-topology-views | 4.0.1 | ☑︎ |
-| netbox-validity | 3.0.5 | ☐ |
-| netboxlabs-diode-netbox-plugin | 0.3.0 | ☐ |
-| phonebox-plugin | 0.0.9 | ☐ |
-| slurpit_netbox | 0.9.84 | ☑︎ |
-
-### 1.4.1
-
-A small release with some dependency updates and the latest set
-of NetBox 4.0-compatible plugins.
-
-#### Plugins
-
-The following plugins are included in this release:
-
-| Plugin | Version | Certified |
-| ------ | ------- | --------- |
-| nbrisk | 41.0.1 | ☐ |
-| netbox-acls | 1.7.0 | ☑︎ |
-| netbox-bgp | 0.14.0 | ☑︎ |
-| netbox-config-diff | 2.7.0 | ☐ |
-| netbox-documents | 0.7.0 | ☐ |
-| netbox-floorplan-plugin | 0.4.1 | ☑︎ |
-| netbox-interface-synchronization | 4.1.4 | ☐ |
-| netbox-inventory | 2.1.0 | ☐ |
-| netbox-lifecycle | 1.1.3 | ☐ |
-| netbox-plugin-dns | 1.1.5 | ☑︎ |
-| netbox-qrcode | 0.0.15 | ☑︎ |
-| netbox-reorder-rack | 1.1.3 | ☐ |
-| netbox-secrets | 2.1.0 | ☐ |
-| netbox-topology-views | 4.1.0 | ☑︎ |
-| netbox-validity | 3.0.5 | ☐ |
-| netboxlabs-diode-netbox-plugin | 0.6.0 | ☑︎ |
-| phonebox-plugin | 0.0.10 | ☐ |
-| slurpit_netbox | 1.0.33 | ☑︎ |
-
-### 1.4.0
-
-Adds support for supplying custom environment variables (eg, for LDAP config).
-It also contains a small auth change to allow curly braces and spaces in the new password validator.
-
-A number of included plugins were updated to their latest compatible versions:
-* `netbox_bgp` was updated to 0.13.3
-* `netbox_floorplan_plugin` was updated to 0.4.1
-* `netbox_plugin_dns` was updated to 1.1.3
-* `netbox_topology_views` was updated to 4.0.1
-* `slurpit_netbox` was updated to 0.9.84
-
-### 1.3.0
-
-Compatible with any standard Kubernetes ingress controller now in KOTS installs, rather than only Nginx.
-Also fixes a potential data loss issue with uploaded images, as well as enabling script and report uploads.
-
-### 1.2.0
-
-Improves ingress configuration, adds support for inheriting the TLS configuration from the Admin Console configuration, and adds a "restore mode" for restoring manual backup data, plus many dependency updates and internal improvements.
-
-### 1.1.0
-
-Simplifies the firewall configuration necessary for installation by making sure all initialization downloads go through our proxy domain.
-
-### 1.0.6
-
-Adds support for NetBox resource usage adjustment and some improvements to startup time on a first install.
-
-It also adds support for backup and restore, depending on your environment and license.
-
-### 1.0.5
-
-Adds support for scraping Prometheus metrics from NetBox, as well as the embedded PostgreSQL, Redis, and SeaweedFS if they are enabled.
-
-Updated to support NetBox v4.0.9, and includes additional bug fixes and startup time improvements.
-
-### 1.0.4
-
-Adds OWASP password complexity validation to NetBox, and includes dependency updates.
-
-### 1.0.3
-
-Fixes issues with preflight checks, and includes minor dependency updates.
-
-### 1.0.2
-
-Provides a number of dependency updates and bug fixes, and includes initial support for backups of built-in Redis and PostgreSQL.
-
-### 1.0.1
-
-Provides bug fixes encountered during the initial rollout of the NetBox Enterprise application.
-
-### 1.0.0
-
-Provides final cleanup of the Beta stream in preparation for the wider release.
-
-Provides a number of internal changes, and includes fixes for an issue where annotations could render improperly and cause problems with upgrades.
-Updated to support NetBox v4.0.7.
\ No newline at end of file
diff --git a/docs/netbox-enterprise/nbe-saml-group-map.md b/docs/netbox-enterprise/nbe-saml-group-map.md
deleted file mode 100644
index 57224979..00000000
--- a/docs/netbox-enterprise/nbe-saml-group-map.md
+++ /dev/null
@@ -1,49 +0,0 @@
-# Configuring SAML Group Mapping in NetBox Enterprise 
-
-Setting up Group Mapping for SAML requires the [base SAML SSO Setup](./nbe-saml.md) to be configured and working first.
-
-## Configure the IdP 
-
-NetBox Enterprise expects a SAML group attribute statement to be named `groups`, which contains a list of group names the user belongs to. If your IdP sends group information under a different attribute name, such as `MemberOf`, you must update its configuration to use `groups` to ensure proper mapping.
-
-Example:
-
-![SAML Settings](../images/netbox-enterprise/SAML/netbox-enterprise-saml-idp-groups.png)
-
-## Configuring Group Mappings  
-
-1. Desired groups must first be configured within NetBox
-2. In the Admin Console for NetBox Enterprise, navigate to the **Config** tab and scroll to the bottom to check **Advanced Settings**
-3. Apply the following into **NetBox Python Configuration Overrides**, replacing the relevant information.
-
-``` python
-SOCIAL_AUTH_PIPELINE = (
-'social_core.pipeline.social_auth.social_details',
-'social_core.pipeline.social_auth.social_uid',
-'social_core.pipeline.social_auth.social_user',
-'social_core.pipeline.user.get_username',
-'social_core.pipeline.social_auth.associate_by_email',
-'social_core.pipeline.user.create_user',
-'social_core.pipeline.social_auth.associate_user',
-'netbox.authentication.user_default_groups_handler',
-'social_core.pipeline.social_auth.load_extra_data',
-'social_core.pipeline.user.user_details',
-'nbc_auth_extensions.saml_authentication.saml_map_groups',
-)
-
-SOCIAL_AUTH_PIPELINE_CONFIG = {
-    'SAML_USER_FLAGS_BY_GROUP': {
-        "is_staff": {
-            "idp-staff-group-name" # remove this line if no group should be granted 'Staff'
-        },
-        "is_superuser": {
-            "idp-superuser-group-name" # remove this line if no group should be granted 'Superuser'
-        }
-    },
-    'SAML_GROUP_MAP': {
-        "idp-group-name-1": "netbox-group-name-1",
-        "idp-group-name-2": "netbox-group-name-2"
-    }
-}
-```
-
diff --git a/docs/netbox-enterprise/nbe-saml.md b/docs/netbox-enterprise/nbe-saml.md
deleted file mode 100644
index e0aedeb1..00000000
--- a/docs/netbox-enterprise/nbe-saml.md
+++ /dev/null
@@ -1,90 +0,0 @@
-# NetBox Enterprise SAML Configuration Guide
-
-## Required Information
-
-- **Entity ID**: This is your IdP's Entity ID obtained from the SAML metadata
-- **SSO URL**: Your IdP's SSO login URL
-- **x509 Certificate**: The Base64-encoded X.509 certificate used to sign SAML assertions
-- **NetBox Enterprise URL**: URL For the NetBox Enterprise instance
-
-## Generate Public and Private Keys
-These will be used later during configuration and can be generated from anywhere. Be sure to keep the private key secure.
-
-``` shell
-openssl genpkey -algorithm RSA -out saml_private_key.pem -pkeyopt rsa_keygen_bits:2048
-
-openssl req -new -x509 -key saml_private_key.pem -out saml_cert.pem -days <specify number of days valid>
-```
-
-## Configure the IdP
-Set up the IdP using the public key from the previous section, and the ACS URL (based on the NetBox Enterprise URL). These steps will vary depending on the IdP in use.
-
-**ACS URL**: "{NetBox Enterprise URL}/oauth/complete/saml/"
-**SP Entity ID**: "{NetBox Enterprise URL}"
-
-Example:
-
-![SAML Settings](../images/netbox-enterprise/SAML/netbox-enterprise-saml-idp.png)
-
-### Configure Attributes or Claims
-Setup similar mappings in the IdP's "Attributes" or "Claims" section. Names may vary on different platforms.
-
-``` shell
-"attr_first_name": "first_name"
-"attr_last_name": "last_name"
-"attr_username": "email"
-"attr_email": "email"
-```
-
-Example:
-
-![Attribute Settings](../images/netbox-enterprise/SAML/netbox-enterprise-saml-attributes.png)
-
-### Capture x509 Certificate
-After setting up the IdP, generate a certificate in the IdP (this may be done by default). The x509 certificate can either be downloaded or viewed in the SAML metadata URL. This certificate data will be used in the next step.
-
-## Update NetBox Enterprise Config
-1. In the Admin Console for NetBox Enterprise, navigate to the **Config** tab and scroll to the bottom to check **Advanced Settings**
-2. Apply the following into **NetBox Python Configuration Overrides**, replacing the relevant information from previous steps.
-
-``` shell
-REMOTE_AUTH_ENABLED = True
-REMOTE_AUTH_AUTO_CREATE_USER = True
-REMOTE_AUTH_BACKEND = 'social_core.backends.saml.SAMLAuth'
-SOCIAL_AUTH_REDIRECT_IS_HTTPS = True
-
-SOCIAL_AUTH_SAML_SP_ENTITY_ID = "<NetBox Enterprise Instance URL>"
-SOCIAL_AUTH_SAML_SP_PUBLIC_CERT = "-----BEGIN CERTIFICATE-----<Public Key goes here>-----END CERTIFICATE-----"
-SOCIAL_AUTH_SAML_SP_PRIVATE_KEY = "-----BEGIN PRIVATE KEY-----<Private Key goes here>-----END PRIVATE KEY-----"
-
-SOCIAL_AUTH_SAML_ORG_INFO = {
-    "en-US": {
-        "name": "<Org Name>",
-        "displayname": "<Org Display Name>",
-        "url": "<Org Website>",
-    }
-}
-
-SOCIAL_AUTH_SAML_TECHNICAL_CONTACT = {
-    "givenName": "support",
-    "emailAddress": "[<Support Email Address>](mailto:<Support Email Address>)"
-}
-
-SOCIAL_AUTH_SAML_SUPPORT_CONTACT = {
-    "givenName": "support",
-    "emailAddress": "[<Support Email Address>](mailto:<Support Email Address>)"
-}
-
-SOCIAL_AUTH_SAML_ENABLED_IDPS = {
-    "idp": {
-        "entity_id": "<SAML Entity ID>",
-        "url": "<SAML Sign-on URL>",
-        "x509cert": "<x509 Certificate>",
-        "attr_user_permanent_id": "email",
-        "attr_first_name": "first_name",
-        "attr_last_name": "last_name",
-        "attr_username": "email",
-        "attr_email": "email",
-    }
-}
-```
\ No newline at end of file
diff --git a/docs/netbox-enterprise/nbe-tls-ingress.md b/docs/netbox-enterprise/nbe-tls-ingress.md
deleted file mode 100644
index dfddeab7..00000000
--- a/docs/netbox-enterprise/nbe-tls-ingress.md
+++ /dev/null
@@ -1,79 +0,0 @@
-# TLS and Ingress: Accessing NetBox Enterprise
-
-## NetBox Enterprise Installs
-
-### Ingress
-
-The NetBox Enterprise installation provides its own ingress controller.
-No additional configuration is required to reach NetBox on HTTP and HTTPS.
-
-### TLS
-
-#### Configuration
-
-When you first install NetBox Enterprise and log into the Admin Console, it asks you to configure the TLS certificate.
-By default, it will generate a self-signed certificate, but you are able to instead upload private key and certificate chain files.
-
-This key and certificate chain are used for any TLS connections to the cluster, whether it's the Admin Console (on port 30000) or the main NetBox interface (on port 443).
-
-#### Key Replacement/Rotation
-
-If you configured your Admin Console to use a self-signed certificate on install and wish to replace it with your own key, or if you have an existing custom key that needs rotation, you can follow these steps to do so.
-
-!!! note
-    Ensure you have your private key and a full certificate chain in PEM format.
-    If you're using Let's Encrypt, this will be the `privkeyXX.pem` and `fullchainXX.pem` files.
-    For other certificate providers, consult their documentation.
-
-First, access the NetBox Enterprise shell:
-
-```shell
-/var/lib/embedded-cluster/bin/netbox-enterprise shell
-```
-
-Then, delete the old secret and create the new one, providing the path to your chain and key files:
-
-```shell
-kubectl -n kotsadm delete secret kotsadm-tls && \
-kubectl -n kotsadm create secret tls kotsadm-tls --cert=/path/to/cert.pem --key=/path/to/key.pem
-```
-
-Finally, delete the proxy and ingress pods, so they relaunch with the new configuration:
-
-```shell
-NGINX_POD="$(kubectl -n ingress-nginx get pods --selector='app.kubernetes.io/name=ingress-nginx' -o name)"
-PROXY_POD="$(kubectl -n kotsadm get pods --selector='app==kurl-proxy-kotsadm' -o name)"
-kubectl -n ingress-nginx delete "${NGINX_POD}" && \
-kubectl -n kotsadm delete "${PROXY_POD}"
-```
-
-<!--
-## KOTS Installs
-
-### Ingress
-
-Since NetBox Enterprise will be installed into an existing cluster when using a KOTS install, it is expected that ingress (and TLS configuration) will be provided by your environment.
-
-By default, NetBox Enterprise publishes an `Ingress` resource which is picked up automatically by a Kubernetes ingress controller.
-
-### TLS
-
-As long as your ingress controller provides a TLS endpoint, there are no special changes necessary in the NetBox Enterprise configuration.
-
-For example, if you are using the `ingress-nginx` controller Helm chart, your NetBox instance will be available on HTTP and HTTPS if you set a default certificate like so:
-
-```yaml title="values.yaml"
-controller:
-  service:
-    type: NodePort
-    nodePorts:
-      http: "80"
-      https: "443"
-    extraArgs:
-      default-ssl-certificate: "<NAMESPACE>/<SECRETNAME>"
-```
-
-The `default-ssl-certificate` line should point to the cluster location of your secret containing the certificate and key information, tagged with the type `kubernetes.io/tls`.
-For details, see the [official Kubernetes documentation](https://kubernetes.io/docs/concepts/configuration/secret/#tls-secrets).
-
--->
\ No newline at end of file
diff --git a/docs/netbox-enterprise/nbe-troubleshooting.md b/docs/netbox-enterprise/nbe-troubleshooting.md
deleted file mode 100644
index 5a20ae3b..00000000
--- a/docs/netbox-enterprise/nbe-troubleshooting.md
+++ /dev/null
@@ -1,110 +0,0 @@
-# Advanced Tools and Troubleshooting
-
-NetBox Enterprise is designed to harness the power of Kubernetes while minimizing the amount of work the average person needs to manage it.
-However, sometimes it's still useful or necessary to peek under the hood.
-
-## Applications
-
-The following applications are used for various facets of administration:
-
-* [kubectl](https://kubernetes.io/docs/tasks/tools/)\*: CLI for interacting with clusters.
-* [preflight](https://troubleshoot.sh/)\*: CLI for manually running preflight validation checks.
-  Install by running:<br>
-  `curl https://krew.sh/preflight | bash`
-* [support-bundle](https://troubleshoot.sh/)\*: CLI for manually generating support bundles.
-  Install by running:<br>
-  `curl https://krew.sh/support-bundle | bash`
-* [k9s](https://k9scli.io/): a TUI for managing and viewing cluster resources.
-
-_\* provided by the NetBox Enterprise install_
-
-## Accessing Your Cluster from the Command Line
-
-<!--
-### NetBox Enterprise Installer
--->
-
-If you are running the NetBox Enterprise installer, you will need to first execute a command to get a shell environment that knows how to interact with it.  To do this, run:
-
-```shell
-/var/lib/embedded-cluster/bin/netbox-enterprise shell
-```
-
-<!--
-### KOTS Install
-
-If you are running your own cluster and have installed using KOTS, make sure you have `kubectl` in your `PATH` and that it is able to access your cluster.
-
-The specifics will depend on the type of cluster and where you are accessing it from.
-
--->
-
-## Accessing Your Cluster from the Web
-
-<!--
-### Embedded Cluster
--->
-
-The admin console is always available at `https://your-cluster-host-or-ip:30000/` in a default NetBox Enterprise install.
-
-<!--
-### KOTS Install
-
-To access the admin console in a KOTS install, run:
-
-```shell
-kubectl kots admin-console --namespace netbox-enterprise
-```
-
-This will create a port-forward into the cluster and provide you with a link to reach the console.
-
--->
-
-## Generating a Support Bundle
-
-### Command-Line
-
-[Access your cluster](#accessing-your-cluster-from-the-command-line) from the shell.  If you haven't [installed the `support-bundle` package](#applications), do so now.
-
-Run:
-```
-kubectl support-bundle /var/lib/embedded-cluster/support/host-support-bundle.yaml --load-cluster-specs
-```
-
-This will run a series of tests and provide a short summary of what it found, much like the preflights that run during install and when deploying.
-When complete, the TUI will display, like so:
-![Support Bundle Output](../images/netbox-enterprise/netbox-enterprise-support-bundle-tui.png)
-
-Typing `s` to save will save a short summary `.txt` file of the output you can see in the TUI.
-Typing `q` to quit will quit without saving the summary.
-In both cases, a `.tar.gz` support bundle will _also_ be created in the current directory.
-This file can be used by NetBox Labs to troubleshoot your system.
-
-## Debug Logging
-
-> ⚠️ **Warning**: Do not enable debug logging in production environments. Debug logging can expose sensitive information to unauthenticated users and significantly impact system performance.
-
-Enable debug logging to increase log verbosity for troubleshooting issues. Debug logs provide detailed information about system operations and can help diagnose problems.
-
-### Enabling Debug Mode
-
-1. Access the admin console
-2. Navigate to "Config" section
-3. Find "Enable Debug Logging" toggle
-4. Enable the toggle
-5. Click "Save Config"
-6. Deploy the updated configuration
-
-![Debug Logging Enabled](../images/netbox-enterprise/netbox-enterprise-debug-checkbox.png)
-
-### Viewing Debug Logs
-
-Access the logs using:
-
-```shell
-kubectl logs netbox-enterprise-<pod_id> -n kotsadm
-```
-
-Log example:
-
-![Debug Logging Enabled](../images/netbox-enterprise/netbox-enterprise-debug-logging-example.png)
diff --git a/docs/netbox-extensions/changes/changelog.md b/docs/netbox-extensions/changes/changelog.md
deleted file mode 100644
index ccf6484e..00000000
--- a/docs/netbox-extensions/changes/changelog.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# Change Log
-
-## v0.2.0
-
-* Initial release
diff --git a/docs/netbox-extensions/changes/configuration.md b/docs/netbox-extensions/changes/configuration.md
deleted file mode 100644
index 3a134a28..00000000
--- a/docs/netbox-extensions/changes/configuration.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# Configuration Parameters
-
-The following plugin configuration parameters are available.
-
-## `protect_main`
-
-Default: False
-
-When enabled, all object creations, changes, and deletions must be made within a branch. Changes to objects in main will not be permitted, except for those object types which do not support branching.
diff --git a/docs/netbox-extensions/changes/index.md b/docs/netbox-extensions/changes/index.md
deleted file mode 100644
index af568396..00000000
--- a/docs/netbox-extensions/changes/index.md
+++ /dev/null
@@ -1,38 +0,0 @@
-# NetBox Change Management
-
-This plugin adds change management support to [NetBox](http://netboxlabs.com/oss/netbox/). Leveraging the [netbox-branching](https://github.com/netboxlabs/netbox-branching) plugin, it implements policy and workflow controls to ensure proposed changes undergo formal review prior to being merged. It also retains a written record of all approved changes.
-
-## Getting Started
-
-### Defining a Policy
-
-Change policies determine who is eligible to approve a change request and how many approvals a change request requires. Each policy contains one or more rules which define these parameters.
-
-Begin by creating a new policy with a name of your choosing, then add however many rules are necessary to enforce your organization's change policy.
-
-For example, suppose your team requires that every change be approved by two engineers (members of the Engineering group in NetBox) and one of the two lead engineers (Alice and Bob). This can be achieved by adding two rules to the policy.
-
-| Rule | Minimum reviews | Reviewer groups | Reviewers  |
-|------|-----------------|-----------------|------------|
-| #1   | 2               | Engineering     | -          |
-| #2   | 1               | -               | Alice, Bob |
-
-This policy will be met only when at least two members of the Engineering group _and_ Alice or Bob submit approvals.
-
-### Create a Change Request
-
-When you've finished staging your changes in a branch, click the "request review" button at the top of the branch view. This will take you to the change request creation form.
-
-Enter a name for your change request (or keep the default value, taken from the branch's name) and select the change policy which applies to your request. Each change request will be opened in "draft" status with medium priority by default, but these can be changed. Go ahead and change the status to "needs review" if it's ready for review now. Finally, provide a brief summary of your changes for reviewers.
-
-### Reviewing a Change Request
-
-Once a change request has been submitted, it can be reviewed by other users. To review a change request, click the "add a review" link above the list of reviews (if any). Select the status of your review and provide any comments you have. Your review will now show up under the change request.
-
-Alternatively, if you'd like to provide more detailed feedback, select the "changes" tab. Here, you can comment on specific changes within the branch and cite any concerns or suggestions you have. Other users can then reply to your comments.
-
-### Applying a Change Request
-
-Once a change request has been approved, the "merge" button will appear. Clicking it will take you to the form to merge the corresponding branch.
-
-Once the branch has been merged successfully, the change request's status will be automatically updated to "completed."
diff --git a/docs/netbox-extensions/changes/models/changerequest.md b/docs/netbox-extensions/changes/models/changerequest.md
deleted file mode 100644
index 6af9a7e4..00000000
--- a/docs/netbox-extensions/changes/models/changerequest.md
+++ /dev/null
@@ -1,50 +0,0 @@
-# Change Requests
-
-A change request is submitted to request approval of proposed changes in a branch before it can be merged. All rules of the assigned [change policy](./policy.md) must be met for the request to be approved. When submitting a change request for a branch, the owner selects the governing policy and designates a priority.
-
-## Fields
-
-### Name
-
-The user-defined name of the change request.
-
-### Owner
-
-The user who submitted the change request.
-
-### Policy
-
-The [policy](./policy.md) which must be met for the change request to be approved.
-
-!!! note
-    The policy is selected by the change request owner.
-
-### Branch
-
-The branch which will be merged when the change request has been approved.
-
-### Status
-
-The current status of the change request. Valid statuses are listed below.
-
-| Status       | Description                                        |
-|--------------|----------------------------------------------------|
-| Draft        | Not yet ready for review                           |
-| Needs review | Waiting for reviews to satisfy the assigned policy |
-| Approved     | The assigned policy has been met                   |
-| Completed    | The assigned branch has been merged                |
-| Rejected     | The proposed changes have been rejected            |
-
-### Priority
-
-The priority of the change request relative to other open requests. Valid priorities are listed below.
-
-* High (5)
-* Medium/high (4)
-* Medium (3)
-* Medium/low (2)
-* Low (1)
-
-### Summary
-
-A short summary of the proposed changes, reasoning for why they are being made, and any other relevant notes for reviewers.
diff --git a/docs/netbox-extensions/changes/models/comment.md b/docs/netbox-extensions/changes/models/comment.md
deleted file mode 100644
index 533fd82d..00000000
--- a/docs/netbox-extensions/changes/models/comment.md
+++ /dev/null
@@ -1,25 +0,0 @@
-# Comments
-
-As part of the review process, users can leave comments on [change requests](./changerequest.md) to ask question or suggest changes. Each comment may start a thread of [replies](./commentreply.md) and can be marked resolved, which will hide the reply thread.
-
-## Fields
-
-### Author
-
-The user who created the comment.
-
-### Change Request
-
-The [change request](./changerequest.md) to which the comment applies.
-
-### Change Diff
-
-The specific change within the change request the comment applies (optional).
-
-### Content
-
-The comment body.
-
-### Resolved
-
-A boolean attribute indicating whether the comment has been addressed by the change request owner.
diff --git a/docs/netbox-extensions/changes/models/commentreply.md b/docs/netbox-extensions/changes/models/commentreply.md
deleted file mode 100644
index 13806f86..00000000
--- a/docs/netbox-extensions/changes/models/commentreply.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# Comment Replies
-
-Each [comment](./comment.md) on a [change request](./changerequest.md) starts a new discussion thread to which users can reply. This helps keep the discussion around a change request organized.
-
-## Fields
-
-### Author
-
-The user who created the reply.
-
-### Comment
-
-The comment to which the reply thread belongs.
-
-### Content
-
-The reply body.
diff --git a/docs/netbox-extensions/changes/models/policy.md b/docs/netbox-extensions/changes/models/policy.md
deleted file mode 100644
index a477a86a..00000000
--- a/docs/netbox-extensions/changes/models/policy.md
+++ /dev/null
@@ -1,12 +0,0 @@
-# Policies
-
-A policy defines the conditions that must be met for a [change request](./changerequest.md) to be merged. Each policy defines one or more [rules](./policyrule.md) which assert these conditions. All rules must be met for the policy to be satisfied.
-
-!!! note
-    A policy with no rules defined will always fail.
-
-## Fields
-
-### Name
-
-The name by which the policy is referenced.
diff --git a/docs/netbox-extensions/changes/models/policyrule.md b/docs/netbox-extensions/changes/models/policyrule.md
deleted file mode 100644
index 8bebb0bf..00000000
--- a/docs/netbox-extensions/changes/models/policyrule.md
+++ /dev/null
@@ -1,30 +0,0 @@
-# Policy Rules
-
-Each [policy](./policy.md) contains one or more rules which assert certain conditions that must be met for the policy to be met. For example, you might define a policy that requires the approval of two engineers and one manager.
-
-Users whose reviews will satisfy the rule are identified by assigning individual users and/or groups of users for each rule. The minimum reviews parameter defines how many approved must be submitted for the rule to be met.
-
-## Fields
-
-### Name
-
-The short name by which the rule is identified.
-
-### Enabled
-
-A boolean indicating whether the rule is enabled. Rules are enabled by default.
-
-### Minimum Reviews
-
-The minimum number of eligible reviewers which must approve the change in order for the rule to pass.
-
-!!! note
-    A value of zero may be set to assert that a rule shall always pass, although this is generally not recommended.
-
-### Reviewer Groups
-
-Groups of users whose approval will satisfy this rule.
-
-### Reviewers
-
-Individual users whose approval will satisfy this rule.
diff --git a/docs/netbox-extensions/changes/models/review.md b/docs/netbox-extensions/changes/models/review.md
deleted file mode 100644
index 09c63c79..00000000
--- a/docs/netbox-extensions/changes/models/review.md
+++ /dev/null
@@ -1,25 +0,0 @@
-# Reviews
-
-Reviews are submitted to approve, reject, or comment on a [change request](./changerequest.md). The users eligible to review a particular change request are determined by its assigned [change policy](./policy.md).
-
-## Fields
-
-### Change Request
-
-The [change request](./changerequest.md) being reviewed.
-
-### User
-
-The author of the review.
-
-### Status
-
-The current status of the review. Valid statuses are listed below.
-
-| Status            | Description                                                      |
-|-------------------|------------------------------------------------------------------|
-| Pending           | The review is in progress                                        |
-| Comment           | The reviewer has questions or feedback                           |
-| Changes Requested | The reviewer has requested modifications to the proposed changes |
-| Approved          | The proposed changes are accepted                                |
-| Rejected          | The proposed changes are rejected                                |
diff --git a/docs/netbox-extensions/diode/getting-started.md b/docs/netbox-extensions/diode/getting-started.md
deleted file mode 100644
index f94ac61f..00000000
--- a/docs/netbox-extensions/diode/getting-started.md
+++ /dev/null
@@ -1,246 +0,0 @@
-# Getting Started with Diode
-
-This guide will help you set up and start using Diode to ingest data into NetBox.
-
-## Prerequisites
-
-Before you begin, ensure you have:
-
-- NetBox version 4.2.3 or later
-- Docker version 27.0.3 or newer
-- bash 4.x or newer
-- jq
-- Network connectivity between your NetBox server and the Diode server
-- Sufficient permissions to run Docker commands
-
-## Installation Steps
-
-### Deploy Diode server
-
-> **Host**: These steps should be performed on the host where you want to run the Diode server.
-
-> **Note**: For the complete installation instructions, please refer to the [official Diode Server documentation](https://github.com/netboxlabs/diode/tree/develop/diode-server).
-
-We provide a `quickstart.sh` script to automate the setup process. The script will download and configure all necessary files:
-
-- `docker-compose.yaml` — Defines Diode server containers
-- `.env` — Environment settings for customization
-- `nginx.conf` — Nginx configuration for routing Diode endpoints
-- `client-credentials.json` — Defines OAuth2 clients for secure communication
-
-1. Create a working directory:
-   ```bash
-   mkdir -p /opt/diode
-   cd /opt/diode
-   ```
-
-2. Download and prepare the quickstart script:
-   ```bash
-   curl -sSfLo quickstart.sh https://raw.githubusercontent.com/netboxlabs/diode/release/diode-server/docker/scripts/quickstart.sh
-   chmod +x quickstart.sh
-   ```
-
-3. Run the script with your NetBox server address:
-   ```bash
-   ./quickstart.sh https://<netbox-server>
-   ```
-   > **Note**: Replace `<netbox-server>` with your actual NetBox server address. Do not include a trailing slash.
-   > Example: `./quickstart.sh https://netbox.example.com`
-
-   This should have created an `.env` file for your environment.
-
-4. Start the Diode server:
-   ```bash
-   docker compose up -d
-   ```
-
-5. Verify the Diode server is running:
-   ```bash
-   docker compose ps
-   ```
-   All services should show as "running" or "healthy".
-
-6. Extract the `netbox-to-diode` client secret. This will be needed for the Diode NetBox plugin installation:
-   ```bash
-   echo $(jq -r '.[] | select(.client_id == "netbox-to-diode") | .client_secret' /opt/diode/oauth2/client/client-credentials.json)
-   ```
-   > **Note**: This will return a credential that will be used by the Diode NetBox plugin to connect to the Diode server. Store it safely.
-
-### Install Diode NetBox Plugin
-
-> **Host**: These steps should be performed on the host where NetBox is installed.
-
-> **Note**: For the complete installation instructions, please refer to the [official Diode NetBox Plugin documentation](https://github.com/netboxlabs/diode-netbox-plugin/blob/develop/README.md).
-
-1. **Source the NetBox Python Virtual Environment**
-   ```bash
-   cd /opt/netbox
-   source venv/bin/activate
-   ```
-
-2. **Install the Plugin Package**
-   ```bash
-   pip install netboxlabs-diode-netbox-plugin
-   ```
-
-3. **Configure NetBox Settings**
-   Add the following to your `configuration.py`:
-   ```python
-   PLUGINS = [
-       "netbox_diode_plugin",
-   ]
-
-   PLUGINS_CONFIG = {
-       "netbox_diode_plugin": {
-           # Diode gRPC target for communication with Diode server
-           "diode_target_override": "grpc://<diode-server:port>/diode",
-           # NetBox username associated with changes applied via plugin
-           "diode_username": "diode",
-           # netbox-to-diode client secret from earlier step
-           "netbox_to_diode_client_secret": "<netbox-to-diode-secret>"
-       },
-   }
-   ```
-   > **Note**: Replace `<diode-server:port>` with your Diode server address and port (default: 8080)
-   > Example: `grpc://diode.example.com:8080/diode`
-
-4. **Apply Database Migrations**
-   ```bash
-   cd /opt/netbox/netbox
-   ./manage.py migrate netbox_diode_plugin
-   ```
-
-5. **Restart NetBox Services**
-   ```bash
-   sudo systemctl restart netbox netbox-rq
-   ```
-
-6. **Generate Diode Client Credentials**
-   > **Note**: These credentials will be used by the Orb agent to send discovery results to NetBox via Diode.
-
-   1. Go to your NetBox instance (https://<netbox-server>)
-   2. In the left-hand pane, navigate to **Diode -> Client Credentials**
-   3. Click on **+ Add a Credential**
-   4. For Client Name, enter any name and click **Create**
-   5. **IMPORTANT**: Copy the _Client ID_ and _Client Secret_ and save them securely
-   6. Click **Return to List**
-
-   You have now created your Diode client credentials. These will be used as environment variables when running the Orb agent.
-
-### Ingest Data with Orb Agent
-
-> **Host**: These steps should be performed on the host where you want to run the Orb agent for network discovery.
-
-> **Note**: For the complete installation instructions, please refer to the [official Orb Agent documentation](https://github.com/netboxlabs/orb-agent).
-
-1. **Export Client Credentials**
-   ```bash
-   # Export the client credentials you generated in NetBox
-   export DIODE_CLIENT_ID="<your-client-id>"
-   export DIODE_CLIENT_SECRET="<your-client-secret>"
-   ```
-
-2. **Create Agent Configuration File**
-   Create an `agent.yaml` file with the following content:
-   ```yaml
-   orb:
-     config_manager:
-       active: local
-     backends:
-       network_discovery:  # Enable network discovery backend
-       common:
-         diode:
-           target: grpc://<diode-server:port>/diode
-           client_id: ${DIODE_CLIENT_ID}
-           client_secret: ${DIODE_CLIENT_SECRET}
-           agent_name: my_agent
-     policies:
-       network_discovery:
-         loopback_policy:
-           config:
-           scope:
-             targets: 
-               - 127.0.0.1
-   ```
-   > **Note**: Replace `<diode-server:port>` with your Diode server address and port (default: 8080)
-   > Example: `grpc://diode.example.com:8080/diode`
-
-3. **Run the Agent**
-   
-   Using host network mode (recommended):
-   ```bash
-   docker run --net=host \
-     -v $(pwd):/opt/orb/ \
-     -e DIODE_CLIENT_ID \
-     -e DIODE_CLIENT_SECRET \
-     netboxlabs/orb-agent:latest run -c /opt/orb/agent.yaml
-   ```
-
-   Alternative using root user:
-   ```bash
-   docker run -u root \
-     -v $(pwd):/opt/orb/ \
-     -e DIODE_CLIENT_ID \
-     -e DIODE_CLIENT_SECRET \
-     netboxlabs/orb-agent:latest run -c /opt/orb/agent.yaml
-   ```
-
-   > **Note**: The container needs sufficient permissions to send ICMP and TCP packets. This can be achieved either by:
-   > - Setting the network mode to `host` (recommended)
-   > - Running the container as root user
-
-4. **Verify Agent Operation**
-   - Check the agent logs for successful startup
-   - Verify data appears in NetBox
-
-## Troubleshooting
-
-### Common Issues
-
-1. **Connection Issues**
-   - Verify network connectivity between Diode and NetBox:
-     ```bash
-     # From Diode server
-     curl -v https://<netbox-server>
-     # From NetBox server
-     curl -v grpc://<diode-server:port>/diode
-     ```
-   - Check firewall rules:
-     ```bash
-     # Check if required ports are open
-     netstat -tulpn | grep -E '8080|443'
-     ```
-   - Validate URLs and ports in configuration files:
-     - Diode server `.env`
-     - NetBox `configuration.py`
-     - Orb agent `agent.yaml`
-
-2. **Docker Issues**
-   - Check Docker service status:
-     ```bash
-     systemctl status docker
-     ```
-   - Verify Docker container logs:
-     ```bash
-     docker compose logs
-     ```
-
-3. **Permission Issues**
-   - Ensure proper file permissions:
-     ```bash
-     ls -la /opt/diode/
-     ls -la /opt/netbox/
-     ```
-   - Check Docker socket permissions:
-     ```bash
-     ls -l /var/run/docker.sock
-     ```
-
-### Getting Help
-
-If you encounter issues:
-
-1. Search GitHub: [Issues](https://github.com/netboxlabs/diode/issues)
-2. Find us in Slack: [NetDev Community #orb](https://netdev-community.slack.com/)
-3. Check the logs:
-   - Diode server logs: `docker compose logs`
\ No newline at end of file
diff --git a/docs/netbox-extensions/diode/index.md b/docs/netbox-extensions/diode/index.md
deleted file mode 100644
index 6d0628f2..00000000
--- a/docs/netbox-extensions/diode/index.md
+++ /dev/null
@@ -1,51 +0,0 @@
-# Diode
-
-Diode is a data ingestion service for NetBox that greatly simplifies and enhances the process of adding and updating data in NetBox, ensuring your network source of truth is always accurate and up to date. Our guiding principle in designing Diode has been to make it as easy as possible to get data into NetBox, removing as much burden as possible from the user while shifting that effort to technology.
-
-## Project Status
-
-The Diode project is currently in the _Public Preview_ stage. Please see [NetBox Labs Product and Feature Lifecycle](https://netboxlabs.com/docs/console/product_feature_lifecycle/) for more details. We actively welcome feedback to help identify and prioritize bugs, new features and areas of improvement.
-
-## Prerequisites
-
-- NetBox 4.2.3 or later
-- Python 3.8 or later (for Python SDK)
-- Go 1.18 or later (for Go SDK)
-- Network connectivity between Diode and NetBox
-
-## Quick Start
-
-For a quick step-by-step guide, see our [Getting Started Guide](getting-started.md).
-
-1. **Deploy the Diode Server**
-   See [deployment instructions](https://github.com/netboxlabs/diode/blob/develop/diode-server/README.md)
-
-2. **Install the Diode NetBox Plugin**
-   See [installation instructions](https://github.com/netboxlabs/diode-netbox-plugin/blob/develop/README.md)
-
-3. **Choose Your Data Ingestion Method**
-   - Use the NetBox Discovery agent for automated network discovery: see [instructions to run Orb agent](https://github.com/netboxlabs/orb-agent)
-   - Build custom integrations using our SDKs:
-     - [Python SDK](https://github.com/netboxlabs/diode-sdk-python)
-     - [Go SDK](https://github.com/netboxlabs/diode-sdk-go)
-
-## Documentation
-
-- [Diode Protocol Documentation](protobuf/diode-proto.md)
-- [Metrics](observability/metrics.md)
-- Example scripts and tutorials can be found in the NetBox Labs [NetBox Learning repository](https://github.com/netboxlabs/netbox-learning/tree/develop/diode)
-
-## Related Projects
-
-- [Orb Agent](https://github.com/netboxlabs/orb-agent): Network discovery agent that uses Diode for data ingestion
-- [Diode NetBox Plugin](https://github.com/netboxlabs/diode-netbox-plugin): Required NetBox plugin for Diode integration
-- [Diode Protocol](https://github.com/netboxlabs/diode/tree/develop/diode-proto): Protocol definitions for Diode
-
-## Community & Support
-
-- [GitHub Issues](https://github.com/netboxlabs/diode/issues)
-- [NetBox Community Slack](https://netdev.chat/) - Join the `#orb` channel
-
-## License
-
-Diode is released under the [NetBox Limited Use License 1.0](https://github.com/netboxlabs/diode/blob/develop/LICENSE.md).
\ No newline at end of file
diff --git a/docs/netbox-extensions/diode/observability/metrics.md b/docs/netbox-extensions/diode/observability/metrics.md
deleted file mode 100644
index e073e603..00000000
--- a/docs/netbox-extensions/diode/observability/metrics.md
+++ /dev/null
@@ -1,250 +0,0 @@
-# Metrics
-
-## Available Metrics
-
-### Core Metrics (All Services)
-- `diode_{service}_service_info` - Service information
-- `diode_{service}_service_startup_attempts_total` - Startup attempts
-
-### Service-Specific Metrics
-
-#### Auth Service
-- `diode_auth_service_info` - Service information
-- `diode_auth_service_startup_attempts_total` - Startup attempts
-
-#### Ingester Service
-- `diode_ingester_service_info` - Service information
-- `diode_ingester_service_startup_attempts_total` - Startup attempts
-- `diode_ingester_ingest_requests_total` - Ingest requests (success)
-- `diode_ingester_ingest_entities_total` - Entities ingested
-
-#### Reconciler Service
-- `diode_reconciler_service_info` - Service information
-- `diode_reconciler_service_startup_attempts_total` - Startup attempts
-- `diode_reconciler_handle_message_total` - Messages handled (success)
-- `diode_reconciler_ingestion_log_create_total` - Ingestion logs created (success)
-- `diode_reconciler_change_set_create_total` - Change sets created (success)
-- `diode_reconciler_change_set_apply_total` - Change sets applied (success)
-- `diode_reconciler_change_create_total` - Individual changes created
-- `diode_reconciler_change_apply_total` - Individual changes applied
-
-## Configuration Overview
-
-Diode's telemetry implementation supports multiple configuration methods and exporters.
-
-### Exporters
-- **prometheus**: Serve metrics on `/metrics` endpoint
-- **otlp**: Send to OpenTelemetry Collector
-- **console**: Output to stdout (debugging)
-- **none**: Disable metrics
-
-## Environment Variables
-
-### Core Configuration
-
-| Variable | Description | Default | Required | Example |
-|----------|-------------|---------|----------|---------|
-| `TELEMETRY_SERVICE_NAME` | Service identifier | Auto-detected | No | `netboxlabs/diode/auth` |
-| `TELEMETRY_EXPORTER` | Metrics exporter | `prometheus` | No | `prometheus`, `otlp`, `console`, `none` |
-| `TELEMETRY_PROMETHEUS_PORT` | Prometheus port | `9090` | No | `9090` |
-| `TELEMETRY_OTLP_ENDPOINT` | OTLP endpoint | - | Yes (if OTLP) | `http://collector:4317` |
-| `TELEMETRY_OTLP_INSECURE` | OTLP insecure | `false` | No | `true`, `false` |
-
-### Advanced Configuration
-
-| Variable | Description | Default | Required | Example |
-|----------|-------------|---------|----------|---------|
-| `TELEMETRY_OTLP_TIMEOUT` | OTLP timeout | `30s` | No | `30s` |
-| `TELEMETRY_OTLP_COMPRESSION` | OTLP compression | `none` | No | `gzip`, `none` |
-| `TELEMETRY_RESOURCE_ATTRIBUTES` | Resource attributes | - | No | `service.version=1.0.0` |
-
-## Docker Compose Example
-
-```yaml
-version: '3.8'
-
-services:
-  diode-auth:
-    image: netboxlabs/diode-auth:latest
-    environment:
-      - TELEMETRY_SERVICE_NAME=netboxlabs/diode/auth
-      - TELEMETRY_EXPORTER=prometheus
-      - TELEMETRY_PROMETHEUS_PORT=9090
-    ports:
-      - "9090:9090"
-
-  diode-ingester:
-    image: netboxlabs/diode-ingester:latest
-    environment:
-      - TELEMETRY_SERVICE_NAME=netboxlabs/diode/ingester
-      - TELEMETRY_EXPORTER=prometheus
-      - TELEMETRY_PROMETHEUS_PORT=9091
-    ports:
-      - "9091:9091"
-
-  diode-reconciler:
-    image: netboxlabs/diode-reconciler:latest
-    environment:
-      - TELEMETRY_SERVICE_NAME=netboxlabs/diode/reconciler
-      - TELEMETRY_EXPORTER=prometheus
-      - TELEMETRY_PROMETHEUS_PORT=9092
-    ports:
-      - "9092:9092"
-
-  prometheus:
-    image: prom/prometheus:latest
-    ports:
-      - "9093:9090"
-    volumes:
-      - ./prometheus.yml:/etc/prometheus/prometheus.yml
-    command:
-      - '--config.file=/etc/prometheus/prometheus.yml'
-      - '--storage.tsdb.path=/prometheus'
-      - '--web.console.libraries=/etc/prometheus/console_libraries'
-      - '--web.console.templates=/etc/prometheus/consoles'
-      - '--web.enable-lifecycle'
-```
-
-### Prometheus Configuration
-
-```yaml
-global:
-  scrape_interval: 15s
-
-scrape_configs:
-  - job_name: 'diode-auth'
-    static_configs:
-      - targets: ['diode-auth:9090']
-
-  - job_name: 'diode-ingester'
-    static_configs:
-      - targets: ['diode-ingester:9091']
-
-  - job_name: 'diode-reconciler'
-    static_configs:
-      - targets: ['diode-reconciler:9092']
-```
-
-## OTLP Configuration
-
-### Environment Variables
-
-```bash
-export TELEMETRY_EXPORTER=otlp
-export TELEMETRY_OTLP_ENDPOINT=http://otel-collector:4317
-export TELEMETRY_OTLP_INSECURE=true
-export TELEMETRY_OTLP_TIMEOUT=30s
-export TELEMETRY_OTLP_COMPRESSION=gzip
-```
-
-### OpenTelemetry Collector Configuration
-
-```yaml
-receivers:
-  otlp:
-    protocols:
-      grpc:
-        endpoint: 0.0.0.0:4317
-      http:
-        endpoint: 0.0.0.0:4318
-
-processors:
-  batch:
-
-exporters:
-  prometheus:
-    endpoint: "0.0.0.0:8889"
-  logging:
-    loglevel: debug
-
-service:
-  pipelines:
-    metrics:
-      receivers: [otlp]
-      processors: [batch]
-      exporters: [prometheus, logging]
-```
-
-## Troubleshooting
-
-### Common Issues
-
-1. **Metrics not appearing**
-   - Check the exporter configuration
-   - Verify the service is running
-   - Check firewall rules for metrics ports
-
-2. **Prometheus scraping failures**
-   - Verify the target endpoint is accessible
-   - Check the scrape configuration
-   - Ensure the service is exposing metrics on the correct port
-
-3. **OTLP connection issues**
-   - Verify the collector endpoint is reachable
-   - Check TLS/insecure settings
-   - Validate the collector configuration
-
-### Debugging
-
-1. **Enable console exporter**
-   ```bash
-   export TELEMETRY_EXPORTER=console
-   ```
-
-2. **Check service logs**
-   ```bash
-   docker compose logs diode-auth
-   docker compose logs diode-ingester
-   docker compose logs diode-reconciler
-   ```
-
-3. **Verify metrics endpoints**
-   ```bash
-   curl http://localhost:9090/metrics
-   curl http://localhost:9091/metrics
-   curl http://localhost:9092/metrics
-   ```
-
-## Grafana Dashboard
-
-### Sample Queries
-
-#### Service Health
-```promql
-# Service uptime
-up{job=~"diode-.*"}
-
-# Service restarts
-increase(diode_*_service_startup_attempts_total[5m])
-```
-
-#### Ingestion Metrics
-```promql
-# Ingestion rate
-rate(diode_ingester_ingest_requests_total[5m])
-
-# Entities ingested
-rate(diode_ingester_ingest_entities_total[5m])
-```
-
-#### Reconciliation Metrics
-```promql
-# Message processing rate
-rate(diode_reconciler_handle_message_total[5m])
-
-# Change set creation rate
-rate(diode_reconciler_change_set_create_total[5m])
-
-# Change set application rate
-rate(diode_reconciler_change_set_apply_total[5m])
-```
-
-### Dashboard JSON
-
-A sample Grafana dashboard configuration is available in the [Diode repository](https://github.com/netboxlabs/diode/tree/develop/examples/grafana).
-
-## References
-
-- [OpenTelemetry Documentation](https://opentelemetry.io/docs/)
-- [Prometheus Documentation](https://prometheus.io/docs/)
-- [Grafana Documentation](https://grafana.com/docs/)
\ No newline at end of file
diff --git a/docs/netbox-extensions/diode/protobuf/diode-proto.md b/docs/netbox-extensions/diode/protobuf/diode-proto.md
deleted file mode 100644
index 01eda928..00000000
--- a/docs/netbox-extensions/diode/protobuf/diode-proto.md
+++ /dev/null
@@ -1,275 +0,0 @@
-# Protocol Documentation
-
-This document describes the Diode protocol buffer definitions used for data ingestion and communication between Diode services and NetBox.
-
-## Overview
-
-The Diode protocol is defined using Protocol Buffers (protobuf) and includes definitions for all major NetBox data models including:
-
-- **Network Infrastructure**: Devices, Interfaces, Cables, Circuits
-- **IP Management**: IP Addresses, Prefixes, Aggregates, VLANs
-- **Data Center**: Racks, Locations, Sites, Clusters
-- **Virtualization**: Virtual Machines, Clusters, Platforms
-- **Organization**: Tenants, Contacts, Providers
-
-## Service Definition
-
-The main service endpoint is defined as:
-
-```protobuf
-service IngesterService {
-  // Ingest data entities into NetBox
-  rpc Ingest(stream IngestRequest) returns (stream IngestResponse);
-}
-```
-
-## Core Message Types
-
-### IngestRequest
-
-The primary message type for sending data to Diode:
-
-```protobuf
-message IngestRequest {
-  // Unique identifier for the data source
-  string data_source_id = 1;
-  
-  // Entity being ingested
-  Entity entity = 2;
-}
-```
-
-### Entity
-
-Wrapper for all supported NetBox entities:
-
-```protobuf
-message Entity {
-  oneof entity {
-    // DCIM entities
-    Site site = 1;
-    Location location = 2;
-    Device device = 3;
-    Interface interface = 4;
-    Cable cable = 5;
-    
-    // IPAM entities
-    Prefix prefix = 6;
-    IPAddress ip_address = 7;
-    VLAN vlan = 8;
-    
-    // Circuits entities
-    Circuit circuit = 9;
-    CircuitTermination circuit_termination = 10;
-    
-    // Tenancy entities
-    Tenant tenant = 11;
-    
-    // Virtualization entities
-    VirtualMachine virtual_machine = 12;
-    
-    // And many more...
-  }
-}
-```
-
-## Data Models
-
-### Core Infrastructure
-
-#### Site
-Represents a physical location or facility:
-
-```protobuf
-message Site {
-  string name = 1;
-  string slug = 2;
-  string status = 3;
-  string description = 4;
-  string facility = 5;
-  repeated string tags = 6;
-  map<string, CustomFieldValue> custom_fields = 7;
-}
-```
-
-#### Device
-Represents a network device:
-
-```protobuf
-message Device {
-  string name = 1;
-  string device_type = 2;
-  string site = 3;
-  string location = 4;
-  string role = 5;
-  string platform = 6;
-  string serial = 7;
-  string asset_tag = 8;
-  string status = 9;
-  repeated string tags = 10;
-  map<string, CustomFieldValue> custom_fields = 11;
-}
-```
-
-#### Interface
-Represents a network interface:
-
-```protobuf
-message Interface {
-  string device = 1;
-  string name = 2;
-  string type = 3;
-  string description = 4;
-  string mac_address = 5;
-  bool enabled = 6;
-  int32 mtu = 7;
-  repeated string tags = 8;
-  map<string, CustomFieldValue> custom_fields = 9;
-}
-```
-
-### IP Address Management
-
-#### Prefix
-Represents an IP prefix:
-
-```protobuf
-message Prefix {
-  string prefix = 1;
-  string status = 2;
-  string vrf = 3;
-  string tenant = 4;
-  string site = 5;
-  string role = 6;
-  string description = 7;
-  repeated string tags = 8;
-  map<string, CustomFieldValue> custom_fields = 9;
-}
-```
-
-#### IPAddress
-Represents an IP address:
-
-```protobuf
-message IPAddress {
-  string address = 1;
-  string status = 2;
-  string vrf = 3;
-  string tenant = 4;
-  string description = 5;
-  string dns_name = 6;
-  repeated string tags = 7;
-  map<string, CustomFieldValue> custom_fields = 8;
-}
-```
-
-## Custom Fields
-
-All entities support custom fields through a flexible map structure:
-
-```protobuf
-message CustomFieldValue {
-  oneof value {
-    string string_value = 1;
-    int64 integer_value = 2;
-    bool boolean_value = 3;
-    double float_value = 4;
-    string date_value = 5;
-    string url_value = 6;
-    string json_value = 7;
-    repeated string multi_select_value = 8;
-  }
-}
-```
-
-## Response Messages
-
-### IngestResponse
-
-Response message containing ingestion results:
-
-```protobuf
-message IngestResponse {
-  // Operation result
-  string state = 1;
-  
-  // Entity that was processed
-  Entity entity = 2;
-  
-  // Any errors that occurred
-  repeated Error errors = 3;
-}
-```
-
-## Usage Examples
-
-### Python SDK Example
-
-```python
-from diode_sdk import DiodeClient
-
-# Initialize client
-client = DiodeClient(
-    target="grpc://diode.example.com:8080/diode",
-    client_id="your-client-id",
-    client_secret="your-client-secret"
-)
-
-# Create a site
-site = Site(
-    name="New York DC",
-    slug="ny-dc",
-    status="active",
-    description="Primary data center in New York"
-)
-
-# Ingest the site
-response = client.ingest(site)
-print(f"Ingestion result: {response.state}")
-```
-
-### Go SDK Example
-
-```go
-package main
-
-import (
-    "context"
-    "github.com/netboxlabs/diode-sdk-go/diode"
-)
-
-func main() {
-    // Initialize client
-    client, err := diode.NewClient(
-        "grpc://diode.example.com:8080/diode",
-        "your-client-id",
-        "your-client-secret",
-    )
-    if err != nil {
-        panic(err)
-    }
-
-    // Create a device
-    device := &diode.Device{
-        Name:       "switch01",
-        DeviceType: "cisco-catalyst-9300",
-        Site:       "ny-dc",
-        Status:     "active",
-    }
-
-    // Ingest the device
-    response, err := client.Ingest(context.Background(), device)
-    if err != nil {
-        panic(err)
-    }
-    
-    fmt.Printf("Ingestion result: %s\n", response.State)
-}
-```
-
-## References
-
-- [Diode Protocol Repository](https://github.com/netboxlabs/diode/tree/develop/diode-proto)
-- [Python SDK Documentation](https://github.com/netboxlabs/diode-sdk-python)
-- [Go SDK Documentation](https://github.com/netboxlabs/diode-sdk-go)
-- [Protocol Buffers Documentation](https://developers.google.com/protocol-buffers)
\ No newline at end of file
diff --git a/docs/netbox-integrations/netbox-ansible-collection.md b/docs/netbox-integrations/netbox-ansible-collection.md
deleted file mode 100644
index 918b79c6..00000000
--- a/docs/netbox-integrations/netbox-ansible-collection.md
+++ /dev/null
@@ -1,378 +0,0 @@
-# NetBox Integrations
-
-## NetBox Ansible Collection - Quick Start
-
-A short guide to getting started with the Ansible Collection for Netbox. 
-
-![netbox ansible collection](../images/integrations/ansible-colection/ansible_collection.png)
-
-The collection is available from [Ansible Galaxy](https://galaxy.ansible.com/ui/repo/published/netbox/netbox/), and NetBox Labs and Red Hat customers can access the certified and supported collection, via [Ansible Automation Hub](https://console.redhat.com/ansible/automation-hub/repo/published/netbox/netbox/). This doc is based on the Galaxy installation and shows how to use the collection from the command line, rather than from within Ansible Automation Hub.
-
-
-## Code Examples
-All code used in the examples below can be found in the NetBox Learning [git repository](https://github.com/netboxlabs/netbox-learning), in the directory `netbox-ansible-collection-quick-start`.
-
-## Collection Overview
-
-The NetBox Ansible project provides an Ansible collection for interacting with NetBox, the leading solution for modeling and documenting modern networks. By combining the traditional disciplines of IP address management (IPAM) and datacenter infrastructure management (DCIM) with powerful APIs and extensions, NetBox provides the ideal "source of truth" to power network automation.
-
-This Ansible collection consists of a set of modules to define the intended network state in NetBox, along with plugins to drive automation of the network using data from NetBox.
-
-## Requirements
-
-- You must be running one of the two most recent releases of NetBox
-- A NetBox write-enabled API token when using modules or a read-only token for the `nb_lookup ` and `nb_inventory` plugins.
-- Python 3.10+
-- Python modules:
-  - pytz
-  - pynetbox
-- Ansible 2.15+
-
-!!! note
-    This guide assumes you have a working NetBox installation, populated with some device data of your own. The easiest way to do this is to set up a [NetBox Cloud Free Plan](https://netboxlabs.com/free-netbox-cloud/) instance, and you can be up an running in seconds. The NetBox instance used in this example has 2 sites with some devices already added:
-
-![NetBox Sites and Devices](../images/integrations/ansible-colection/cisco-live-sites-and-devices.png)
-
-## Getting Started with the Collection
-
-### Installation and Setup
-
-1. Clone the Git repo and change into the `netbox-ansible-collection-quick-start` directory:
-    ```
-    git clone https://github.com/netboxlabs/netbox-learning.git
-    cd netbox-learning/netbox-ansible-collection-quick-start
-    ```
-2. Create and activate a Python 3 virtual environment:
-    ```
-    python3 -m venv ./venv
-    source venv/bin/activate
-    ```
-3. Install Python Modules and Ansible
-   ```
-   pip install pytz
-   pip install pynetbox
-   pip install ansible
-   ```
-4. Install the NetBox Ansible Collection.
-
-   Before using this collection, you need to install it with the Ansible Galaxy command-line tool:
-
-   ```
-   ansible-galaxy collection install netbox.netbox
-   ```
-5. Set environment variables for your NetBox API token and URL of your NetBox instance:
-    ```
-    export NETBOX_API=<YOUR_NETBOX_URL> (note - must include http:// or https://)
-    export NETBOX_TOKEN=<YOUR_NETBOX_API_TOKEN>
-    ```
-## Use Case 1 - NetBox as a Dynamic Inventory Source for Ansible
-
-The [Inventory Plugin](https://docs.ansible.com/ansible/latest/collections/netbox/netbox/nb_inventory_inventory.html) component of the collection is used to dynamically generate the inventory from NetBox to be used in Ansible playbooks.
-
-In the example `ansible.cfg` file we are specifying that the inventory should be sourced from the file `netbox_inv.yml`:
-
- ```
- # ansible.cfg
-
- [defaults]
- inventory = ./netbox_inv.yml
- ```
-
-The plugin is highly configurable in terms of defining returned hosts and groupings etc in the inventory, so please consult the [docs](https://docs.ansible.com/ansible/latest/collections/netbox/netbox/nb_inventory_inventory.html).
-
-In this case we are grouping the returned hosts by the `device_roles` and `sites` as defined in the NetBox database:
-
-```
- # netbox_inv.yml
-
- plugin: netbox.netbox.nb_inventory
- validate_certs: False
- group_by:
-  - device_roles
-  - sites
-```
-
-To view a graph of the inventory retrieved from NetBox, you can run the `ansible-inventory` command and use the `-i` flag to specify the `netbox_inv.yml` file as the source, followed by `--graph`:
-
-```
-ansible-inventory -i netbox_inv.yml --graph
-```
-
-From the returned output we can see that our NetBox instance has returned the data expected grouped the devices by `device_roles` and `sites`:
-```
-@all:
-  |--@device_roles_access:
-  |  |--sw3
-  |  |--sw4
-  |--@device_roles_access_switch:
-  |  |--SWITCH-1
-  |--@device_roles_distribution:
-  |  |--sw1
-  |  |--sw2
-  |--@device_roles_security_appliance:
-  |  |--SEC-APP-1
-  |--@device_roles_wireless_ap:
-  |  |--AP-1
-  |--@sites_cisco_devnet:
-  |  |--sw1
-  |  |--sw2
-  |  |--sw3
-  |  |--sw4
-  |--@sites_meraki_sandbox:
-  |  |--AP-1
-  |  |--SEC-APP-1
-  |  |--SWITCH-1
-  |--@ungrouped:
-```
-
-To list all the devices in the inventory, use the same command, but with the `--list` suffix:
-```
-ansible-inventory -i netbox_inv.yml --list
-```
-
-The output below has been shortened to show the inventory data returned for a single device, and all of this can be used in further playbooks to automate operations against the target device:
-
-```
-"sw1": {
-     "ansible_host": "10.10.20.175",
-     "custom_fields": {
-         "ccc_device_id": "32446e0a-032b-4724-93e9-acbbab47371b",
-         "cisco_catalyst_center": "sandboxdnac.cisco.com"
-     },
-     "device_roles": [
-         "distribution"
-     ],
-     "device_types": [
-         "c9kv-uadp-8p"
-     ],
-     "is_virtual": false,
-     "local_context_data": [
-         null
-     ],
-     "locations": [],
-     "manufacturers": [
-         "cisco"
-     ],
-     "platforms": [
-         "ios-xe"
-     ],
-     "primary_ip4": "10.10.20.175",
-     "regions": [],
-     "serial": "9SB9FYAFA2O",
-     "services": [],
-     "site_groups": [],
-     "sites": [
-         "cisco-devnet"
-     ],
-     "status": {
-         "label": "Active",
-         "value": "active"
-     },
-     "tags": []
-}
-```
-
-To run a playbook that uses the dynamic inventory, specify the inventory file when you run the playbook:
-
-```
-ansible-playbook -i netbox_inv.yml <PLAYBOOK NAME>
-```
-
-To target hosts or groups from the inventory in your playbook, reference the hosts or groups as normal in the playbook:
-```
----
-- name: Playbook using NetBox Inventory Plugin for Ansible
-  hosts: device_roles_distribution, device_roles_access
-```
-
-## Use Case 2 - Define Intended Network State in NetBox
-
-Define the intended state of your network in NetBox, by interacting with the NetBox database to define objects and their associated state in the following ways:
-
-- Make sure objects exit
-- Update objects if they do exist
-- Remove objects if they do not not exist
-
-For example, to make sure a new aggregate network prefix exists:
-```
-tasks:
-    - name: Create aggregate within NetBox with only required information
-      netbox.netbox.netbox_aggregate:
-        netbox_url: http://netbox.local
-        netbox_token: thisIsMyToken
-        data:
-          prefix: 192.168.0.0/16
-          rir: Test RIR
-        state: present
-```
-
-The example playbook `populate_netbox_ipam.yml` will ensure that the `RFC1918` IPv4 aggregates exist in NetBox, as well as some predefined Prefix and VLAN Roles:
-```
-# populate_netbox_ipam.yml
-
----
-- name: PLAY 1 - Create RIRs
-  connection: local
-  hosts: localhost
-  gather_facts: False
-
-  roles:
-    - role: create_rirs
-      tags: rirs
-
-- name: PLAY 2 - Create Aggregates
-  connection: local
-  hosts: localhost
-  gather_facts: False
-
-  roles:
-    - role: create_aggregates
-      tags: aggregates
-
-- name: PLAY 3 - Create Prefix and VLAN Roles
-  connection: local
-  hosts: localhost
-  gather_facts: False
-
-  roles:
-    - role: create_prefix_and_vlan_roles
-      tags: prefix_and_roles
-```
-
-The playbook is modularized using `roles`, for example the file `roles/create_aggregates/tasks/main.yml` loops over the list of aggregates defined in the file `roles/create_aggregates/vars/main.yml`:
-```
-# roles/create_aggregates/tasks/main.yml
-
----
-- name: Create Aggregates within NetBox
-  netbox.netbox.netbox_aggregate:
-    netbox_url: "{{ lookup('ansible.builtin.env', 'NETBOX_API') }}"
-    netbox_token: "{{ lookup('ansible.builtin.env', 'NETBOX_TOKEN') }}"
-    data: "{{ aggregate }}"
-    state: present
-  loop: "{{ ipam_aggregates }}"
-  loop_control:
-    loop_var: aggregate
-    label: "{{ aggregate['prefix']}}"
-```
-
-```
-# roles/create_aggregates/vars/main.yml
----
-ipam_aggregates:
-
-  - prefix: 10.0.0.0/8
-    rir: RFC 1918
-
-  - prefix: 172.16.0.0/12
-    rir: RFC 1918
-
-  - prefix: 192.168.0.0/16
-    rir: RFC 1918
-```
-
-Running the playbook results in the following output:
-
-```
-ansible-playbook populate_netbox_ipam.yml
-```
-```
-
-PLAY [PLAY 1 - Create RIRs] ***********************************************************************************************************************************
-
-TASK [create_rirs : Create RIRs] ******************************************************************************************************************************
-ok: [localhost] => (item=RFC 1918)
-
-PLAY [PLAY 2 - Create Aggregates] *****************************************************************************************************************************
-
-TASK [create_aggregates : Create Aggregates within NetBox] ****************************************************************************************************
-ok: [localhost] => (item=10.0.0.0/8)
-ok: [localhost] => (item=172.16.0.0/12)
-ok: [localhost] => (item=192.168.0.0/16)
-
-PLAY [PLAY 3 - Create Prefix and VLAN Roles] ******************************************************************************************************************
-
-TASK [create_prefix_and_vlan_roles : Create Prefix and VLAN Roles within NetBox] ******************************************************************************
-ok: [localhost] => (item=Branch_Data)
-ok: [localhost] => (item=Branch_Voice)
-ok: [localhost] => (item=Branch_WiFi)
-ok: [localhost] => (item=Guest_WiFi)
-ok: [localhost] => (item=Network_Management)
-ok: [localhost] => (item=Point_to_Point)
-
-PLAY RECAP ****************************************************************************************************************************************************
-localhost                  : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
-```
-## Use Case 3 - Query and Return Elements from NetBox
-
-Use the [Lookup Plugin](https://docs.ansible.com/ansible/latest/collections/netbox/netbox/nb_lookup_lookup.html) to query NetBox and return data to drive network automation, such as lists of devices, device configurations, prefixes and IP addresses etc.
-
-In the example playbook `lookup_site_and_device_data.yml` we first of all query the NetBox `sites` API endpoint and then print a list of all the sites. Then we query the `devices` API endpoint, filter on the site `cisco-devnet` and print a list of the devices at that site:
-
-```
-# lookup_site_and_device_data.yml
----
-- name: Lookup NetBox Site and Device Data
-  hosts: localhost
-  gather_facts: no
-
-  vars:
-    netbox_url: "{{ lookup('ansible.builtin.env', 'NETBOX_API') }}"
-    netbox_token: "{{ lookup('ansible.builtin.env', 'NETBOX_TOKEN') }}"
-
-  tasks:
-
-  - name: "Query NetBox for all sites"
-    set_fact:
-      sites: "{{ query('netbox.netbox.nb_lookup', 'sites', api_endpoint=netbox_url, token=netbox_token) }}"
-
-  - name: "Print the list of sites"
-    debug:
-      msg: "{{ sites | json_query('[*].value.name') }}"
-
-  - name: "Query NetBox for devices at the Cisco DevNet Site"
-    set_fact:
-      devices: "{{ query('netbox.netbox.nb_lookup', 'devices', api_filter='site=cisco-devnet', api_endpoint=netbox_url, token=netbox_token) }}"
-
-  - name: "Print a list of devices at Cisco DevNet Site"
-    debug:
-      msg: "{{ devices | json_query('[*].value.name') }}"
-```
-
-The playbook run results in the following output:
-
-```
-ansible-playbook lookup_site_and_device_data.yml
-```
-```
-PLAY [Lookup NetBox Site and Device Data] *********************************************************************************************************************
-
-TASK [Query NetBox for all sites] *****************************************************************************************************************************
-ok: [localhost]
-
-TASK [Print the list of sites] ********************************************************************************************************************************
-ok: [localhost] =>
-  msg:
-  - Cisco DevNet
-  - Meraki Sandbox
-
-TASK [Query NetBox for devices at the Cisco DevNet Site] ******************************************************************************************************
-ok: [localhost]
-
-TASK [Print a list of devices at Cisco DevNet Site] ***********************************************************************************************************
-ok: [localhost] =>
-  msg:
-  - sw1
-  - sw2
-  - sw3
-  - sw4
-
-PLAY RECAP ****************************************************************************************************************************************************
-localhost                  : ok=4    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
-```
-
-## References
-- Collection on [Ansible Galaxy](https://galaxy.ansible.com/ui/repo/published/netbox/netbox/)
-- Collection on [Ansible Automation Hub](https://console.redhat.com/ansible/automation-hub/repo/published/netbox/netbox/)
-- Docs for [NetBox Inventory Plugin](https://docs.ansible.com/ansible/latest/collections/netbox/netbox/nb_inventory_inventory.html)
-- Docs for [NetBox Lookup Plugin](https://docs.ansible.com/ansible/latest/collections/netbox/netbox/nb_lookup_lookup.html)
\ No newline at end of file
diff --git a/docs/netbox-integrations/pyats.md b/docs/netbox-integrations/pyats.md
deleted file mode 100644
index 75c6a67e..00000000
--- a/docs/netbox-integrations/pyats.md
+++ /dev/null
@@ -1,569 +0,0 @@
-# Getting Started With NetBox, PyATS and Genie
-
-!!! info "Learn More"
-    You can view an on-demand Webinar [Getting Started with Network Test Automation: NetBox + pyATS](https://netboxlabs.com/events/webinar-getting-started-with-network-test-automation-netbox-pyats-genie/) hosted by NetBox Labs. 
-
-## Code Examples
-All code used in the examples below can be found in the NetBox Learning [git repository](https://github.com/netboxlabs/netbox-learning), in the directory `netbox-pyats-webinar`.
-
-### Set Up and Installation
-
-1. Clone the Git repo and change into the `netbox-pyats-webinar` directory:
-    ```
-    git clone https://github.com/netboxlabs/netbox-learning.git
-    cd netbox-learning/netbox-pyats-webinar
-    ```
-2. Create and activate Python 3 virtual environment:
-    ```
-    python3 -m venv ./venv
-    source venv/bin/activate
-    ```
-3. Upgrade pip:
-    ```
-    python3 -m pip install --upgrade pip
-    ```
-4. Install PyATS: 
-
-    As per the official [documentation](https://developer.cisco.com/docs/pyats/api/), there are a options to perform a minimal installation (option 1) or a full installation (opton 2).  
-
-    **Option 1**
-    Minimal install that includes the Genie library and that allows you to use the interactive testbed creation command to create your testbed files from NetBox: 
-    ```
-    pip install pyats[library]
-    pip install pyats.contrib
-    ```
-
-    **Option 2**
-    Full installation that includes all packages and libraries: 
-    ```
-    pip install pyats[full]
-    ```
-
-    !!! tip
-        If you are using Zsh on a Mac then you need to quote the install string.
-    ```
-    pip install "pyats[full]"
-    ```
-    
-    !!! Note
-        If you plan to run the example script `ospf_neighbor_table.py` then you will also need to install the `prettytable` library with `pip install prettytable` or you can simply run the command `pip install -r requirements.txt` to install this along with pyATS, Genie and the `contrib` library. 
-
-    There is also a [PyATS Docker Image](https://developer.cisco.com/codeexchange/github/repo/CiscoTestAutomation/pyats-docker). This command will pull down the container if you don't have it locally and drop you into a Bash shell: 
-    ```
-    docker run -it ciscotestautomation/pyats:latest /bin/bash
-    ```
-
-## Lab Network
-
-Our lab network consists of 2 x Cisco CSR100V routers and they are documented in NetBox under the Site `PyATS Webinar` and are directly connected to each other over port `GigabitEthernet2` on the `192.168.1.0/30` subnet. They are both running OSPF, and you can find the the configuration for this in the [initial_device_configs.md](https://github.com/netboxlabs/netbox-learning/blob/develop/netbox-pyats-webinar/initial_device_configs.md) file: 
-
-  ![lab topology](../images/integrations/pyats/pyats-webinar-devices.png)
-
-  ![netbox devices](../images/integrations/pyats/topology.png)
-
-### Generating The testbed file Dynamically from NetBox Inventory
-
-**Option 1**
-Use the `pyats create testbed netbox` command to build your testbed file. Note that where a value is prefixed with `os.getenv` or `%ENV` then these values are being pulled in from the local environment variables that you need to set with the `export` command eg. `export NETBOX_URL=https://example.cloud.netboxapp.com/`, `export DEF_PYATS_USER=admin`: 
-
-```
-pyats create testbed netbox \
---output testbed.yaml \
---netbox-url=${NETBOX_URL} \
---user-token=${NETBOX_USER_TOKEN} \
---def_user='%ENV{DEF_PYATS_USER}' \
---def_pass='%ENV{DEF_PYATS_PASS}' \
---url_filter='site=pyats-webinar' \
---topology
-```
-
-In this example we are generating a testbed file called `testbed.yaml` and filtering NetBox by the site name `pyats-webinar`. When you hit enter the output will look like this: 
-
-```
-Begin retrieving data from netbox...
-Configuring testbed default credentials.
-Retrieving associated data for CSR1...
-Retrieving associated data for CSR2...
-Testbed file generated: 
-testbed.yaml 
-```
-**Option 2**
-Run the `generate_testbed_file.py` Python script. Note that where a value is prefixed with `os.getenv` or `%ENV` then these values are being pulled in from the local environment variables that you need to set with the `export` command eg. `export NETBOX_URL=https://example.cloud.netboxapp.com/`, `export DEF_PYATS_USER=admin`.
-
-In this script we are generating a testbed file called `testbed.yaml` and filtering NetBox by the site name `pyats-webinar`, but you could just as easily filter on other fields as in the examples commented out: 
-
-```
-# Description: This script generates a testbed file based on the Netbox data
-#              using the pyATS framework. It uses the Netbox class from the
-#              pyats.contrib.creators.netbox module to create the testbed file.
-
-# Import the necessary libraries
-from pyats.contrib.creators.netbox import Netbox
-import yaml
-import os
-
-# Define Netbox URL, user token, and default credentials
-netbox_url = os.getenv('NETBOX_URL')
-user_token = os.getenv('NETBOX_USER_TOKEN')
-def_user = '%ENV{DEF_PYATS_USER}'
-def_pass = '%ENV{DEF_PYATS_PASS}'
-url_filter = 'site=pyats-webinar'
-# url_filter = 'site_id=68'
-# url_filter = 'site=pyats-webinar&os=ios-xe'
-# url_filter = 'platform=ios-xe'
-
-# Create testbed object and build data structure
-nb_testbed = Netbox(
-    netbox_url=netbox_url,
-    user_token=user_token,
-    def_user=def_user,
-    def_pass=def_pass,
-    url_filter=url_filter,
-    ssl_verify=False,
-    topology=True
-)
-
-# Generate testbed file
-tb = nb_testbed._generate()
-tb_yaml = yaml.dump(tb)
-with open("testbed.yaml", "w") as f:
-    f.write(tb_yaml)
-```
-
-The resulting testbed file produced by either option will look something like this, depending on your network. Note that as we included the `--topology` switch the testbed file output includes the interfaces and connections from NetBox also: 
-```
-devices:
-  CSR1:
-    alias: CSR1
-    connections:
-      cli:
-        ip: 10.90.0.35
-        protocol: ssh
-    credentials:
-      default:
-        password: '%ENV{DEF_PYATS_PASS}'
-        username: '%ENV{DEF_PYATS_USER}'
-    os: iosxe
-    platform: iosxe
-    type: CSR1000V
-  CSR2:
-    alias: CSR2
-    connections:
-      cli:
-        ip: 10.90.0.36
-        protocol: ssh
-    credentials:
-      default:
-        password: '%ENV{DEF_PYATS_PASS}'
-        username: '%ENV{DEF_PYATS_USER}'
-    os: iosxe
-    platform: iosxe
-    type: CSR1000V
-testbed:
-  credentials:
-    default:
-      password: '%ENV{DEF_PYATS_PASS}'
-      username: '%ENV{DEF_PYATS_USER}'
-topology:
-  CSR1:
-    interfaces:
-      GigabitEthernet1:
-        alias: CSR1_GigabitEthernet1
-        ipv4: 10.90.0.35/27
-        type: ethernet
-      GigabitEthernet2:
-        alias: CSR1_GigabitEthernet2
-        ipv4: 192.168.1.1/30
-        link: cable_num_34
-        type: ethernet
-      GigabitEthernet3:
-        alias: CSR1_GigabitEthernet3
-        type: ethernet
-      GigabitEthernet4:
-        alias: CSR1_GigabitEthernet4
-        type: ethernet
-      GigabitEthernet5:
-        alias: CSR1_GigabitEthernet5
-        type: ethernet
-  CSR2:
-    interfaces:
-      GigabitEthernet1:
-        alias: CSR2_GigabitEthernet1
-        ipv4: 10.90.0.36/27
-        type: ethernet
-      GigabitEthernet2:
-        alias: CSR2_GigabitEthernet2
-        ipv4: 192.168.1.2/30
-        link: cable_num_34
-        type: ethernet
-      GigabitEthernet3:
-        alias: CSR2_GigabitEthernet3
-        type: ethernet
-      GigabitEthernet4:
-        alias: CSR2_GigabitEthernet4
-        type: ethernet
-      GigabitEthernet5:
-        alias: CSR2_GigabitEthernet5
-        type: ethernet
-```
-
-## Structured Data Vs Unstructured Data
-
-When you run a command at the CLI of a network device, you get unstructured data back as the response, which is just a blob of text: 
-```
-CSR1#sh ip interface brief 
-Interface              IP-Address      OK? Method Status                Protocol
-GigabitEthernet1       10.0.0.15       YES manual up                    up      
-GigabitEthernet2       192.168.1.1     YES manual up                    up      
-Loopback0              1.1.1.1         YES manual up                    up  
-```
-
-This is great for humans, as we can read this, but a computer cannot understand this data. Also if the next version of the OS you are using makes a change to the way that the output is formatted then you will have a problem and have to re-write your scripts to handle this. This is where the Genie parser comes into play as it will parse the output into structured data. The data is then represented using key/value pairs in JSON format that can be used by a computer: 
-
-```
-{
-  "interface": {
-    "GigabitEthernet1": {
-      "interface_is_ok": "YES",
-      "ip_address": "10.0.0.15",
-      "method": "manual",
-      "protocol": "up",
-      "status": "up"
-    },
-    "GigabitEthernet2": {
-      "interface_is_ok": "YES",
-      "ip_address": "192.168.1.1",
-      "method": "manual",
-      "protocol": "up",
-      "status": "up"
-    },
-    "Loopback0": {
-      "interface_is_ok": "YES",
-      "ip_address": "1.1.1.1",
-      "method": "manual",
-      "protocol": "up",
-      "status": "up"
-    }
-  }
-}
-```
-
-## Running Your First Tests With The Genie CLI
-
-### Genie Parsing 
-
-There are parsers available for a large number of network OS's (not just Cisco), and you can view the complete list [here](https://pubhub.devnetcloud.com/media/genie-feature-browser/docs/#/parsers. 
-)
-In this example we will run the `genie parse` command to parse the output of the `show ip ospf neighbor` command and limit it to just device `CSR1`: 
-
-```
-genie parse 'show ip ospf neighbor' --testbed-file testbed.yaml --device CSR1
-  0%|                                                                                                                                                                | 0/1 [00:00<?, ?it/s]{
-  "interfaces": {
-    "GigabitEthernet2": {
-      "neighbors": {
-        "2.2.2.2": {
-          "address": "192.168.1.2",
-          "dead_time": "00:00:34",
-          "priority": 1,
-          "state": "FULL/DR"
-        }
-      }
-    }
-  }
-}
-```
-
-This will output the parsed data to your terminal, but if you want to save the output just append the directory you wish to save it to with the `--output` switch. This will save both the `_console` file (the unstructured data) and the `_parsed` file (the structured data), along with the `connection_` log (the raw output of the full connection process) into the chosen directory:
-
-```
-genie parse 'show ip ospf neighbor' --testbed-file testbed.yaml --device CSR1 --output csr1
-100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:01<00:00,  1.01s/it]
-+==============================================================================+
-| Genie Parse Summary for CSR1                                                 |
-+==============================================================================+
-|  Connected to CSR1                                                           |
-|  -  Log: csr1/connection_CSR1.txt                                            |
-|------------------------------------------------------------------------------|
-|  Parsed command 'show ip ospf neighbor'                                      |
-|  -  Parsed structure: csr1/CSR1_show-ip-ospf-neighbor_parsed.txt             |
-|  -  Device Console:   csr1/CSR1_show-ip-ospf-neighbor_console.txt            |
-|------------------------------------------------------------------------------|
-```
-
-### Genie Learning
-
-In this example we will run the `genie learn` command to learn all about `routing` and `ospf` for both devices in our testbed file. We will also save the output into directory called `pre-change`. Genie will automagically create directories for us if they don't already exist. 
-
-For reference if you run the `genie learn all` command then for IOS-XE devices the list of features learned is: 
-
-```
-acl, arp, bgp, device, dot1x, eigrp, fdb, hsrp, igmp, interface, isis, lag, lisp, lldp, mcast, mld, msdp, nd, ntp, ospf, pim, platform, prefix_list, rip, route_policy, routing, static_routing, stp, terminal, utils, vlan, vrf, vxlan, config
-```
-
-```
-genie learn routing ospf --testbed-file testbed.yaml --output pre-change  
-
-Learning '['routing', 'ospf']' on devices '['CSR1', 'CSR2']'
-100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 2/2 [00:11<00:00,  5.85s/it]
-+==============================================================================+
-| Genie Learn Summary for device CSR1                                          |
-+==============================================================================+
-|  Connected to CSR1                                                           |
-|  -   Log: pre-change/connection_CSR1.txt                                     |
-|------------------------------------------------------------------------------|
-|  Learnt feature 'routing'                                                    |
-|  -  Ops structure:  pre-change/routing_iosxe_CSR1_ops.txt                    |
-|  -  Device Console: pre-change/routing_iosxe_CSR1_console.txt                |
-|------------------------------------------------------------------------------|
-|  Learnt feature 'ospf'                                                       |
-|  -  Ops structure:  pre-change/ospf_iosxe_CSR1_ops.txt                       |
-|  -  Device Console: pre-change/ospf_iosxe_CSR1_console.txt                   |
-|==============================================================================|
-
-
-+==============================================================================+
-| Genie Learn Summary for device CSR2                                          |
-+==============================================================================+
-|  Connected to CSR2                                                           |
-|  -   Log: pre-change/connection_CSR2.txt                                     |
-|------------------------------------------------------------------------------|
-|  Learnt feature 'routing'                                                    |
-|  -  Ops structure:  pre-change/routing_iosxe_CSR2_ops.txt                    |
-|  -  Device Console: pre-change/routing_iosxe_CSR2_console.txt                |
-|------------------------------------------------------------------------------|
-|  Learnt feature 'ospf'                                                       |
-|  -  Ops structure:  pre-change/ospf_iosxe_CSR2_ops.txt                       |
-|  -  Device Console: pre-change/ospf_iosxe_CSR2_console.txt                   |
-|==============================================================================|
-```
-
-## Making a Change to The Network
-Let's make a small change to the `CSR2` router in our test network, and remove the `network 2.2.2.2 0.0.0.0 area 0` statement from the OSPF configuration: 
-
-```
-CSR2#conf t
-Enter configuration commands, one per line.  End with CNTL/Z.
-CSR2(config)#router ospf 1
-CSR2(config-router)#no network 2.2.2.2 0.0.0.0 area 0
-```
-
-Next lets re-learn `routing` and `ospf` for both devices in our testbed file. We will also save the output into directory called `post-change`: 
-
-```
-genie learn routing ospf --testbed-file testbed.yaml --output post-change                  
-
-Learning '['routing', 'ospf']' on devices '['CSR1', 'CSR2']'
-100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 2/2 [00:11<00:00,  5.84s/it]
-+==============================================================================+
-| Genie Learn Summary for device CSR1                                          |
-+==============================================================================+
-|  Connected to CSR1                                                           |
-|  -   Log: post-change/connection_CSR1.txt                                    |
-|------------------------------------------------------------------------------|
-|  Learnt feature 'routing'                                                    |
-|  -  Ops structure:  post-change/routing_iosxe_CSR1_ops.txt                   |
-|  -  Device Console: post-change/routing_iosxe_CSR1_console.txt               |
-|------------------------------------------------------------------------------|
-|  Learnt feature 'ospf'                                                       |
-|  -  Ops structure:  post-change/ospf_iosxe_CSR1_ops.txt                      |
-|  -  Device Console: post-change/ospf_iosxe_CSR1_console.txt                  |
-|==============================================================================|
-
-
-+==============================================================================+
-| Genie Learn Summary for device CSR2                                          |
-+==============================================================================+
-|  Connected to CSR2                                                           |
-|  -   Log: post-change/connection_CSR2.txt                                    |
-|------------------------------------------------------------------------------|
-|  Learnt feature 'routing'                                                    |
-|  -  Ops structure:  post-change/routing_iosxe_CSR2_ops.txt                   |
-|  -  Device Console: post-change/routing_iosxe_CSR2_console.txt               |
-|------------------------------------------------------------------------------|
-|  Learnt feature 'ospf'                                                       |
-|  -  Ops structure:  post-change/ospf_iosxe_CSR2_ops.txt                      |
-|  -  Device Console: post-change/ospf_iosxe_CSR2_console.txt                  |
-|==============================================================================|
-```
-
-## Genie Diff
-Now let's use the `genie diff` command to tell us what changed in our network, and we will store the output in a directory called `routing-diff`: 
-
-```
-genie diff pre-change post-change --output diff 
-1it [00:00, 333.44it/s]
-+==============================================================================+
-| Genie Diff Summary between directories pre-change/ and post-change/          |
-+==============================================================================+
-|  File: routing_iosxe_CSR2_ops.txt                                            |
-|   - Identical                                                                |
-|------------------------------------------------------------------------------|
-|  File: ospf_iosxe_CSR1_ops.txt                                               |
-|   - Identical                                                                |
-|------------------------------------------------------------------------------|
-|  File: routing_iosxe_CSR1_ops.txt                                            |
-|   - Diff can be found at diff/diff_routing_iosxe_CSR1_ops.txt                |
-|------------------------------------------------------------------------------|
-|  File: ospf_iosxe_CSR2_ops.txt                                               |
-|   - Diff can be found at diff/diff_ospf_iosxe_CSR2_ops.txt                   |
-|------------------------------------------------------------------------------|
-```
-
-There are differences in the outputs of both the `routing_iosxe_CSR1_ops.txt` and `ospf_iosxe_CSR2_ops.txt` files and we can view the contents of those files to see what has changed: 
-
-```
-cat diff/diff_routing_iosxe_CSR1_ops.txt 
---- pre-change/routing_iosxe_CSR1_ops.txt
-+++ post-change/routing_iosxe_CSR1_ops.txt
- info:
-  vrf:
-   default:
-    address_family:
-     ipv4:
-      routes:
--      2.2.2.2/32:
--       active: True
--       metric: 2
--       next_hop:
--        next_hop_list:
--         1:
--          index: 1
--          next_hop: 192.168.1.2
--          outgoing_interface: GigabitEthernet2
--          updated: 03:32:43
--       route: 2.2.2.2/32
--       route_preference: 110
--       source_protocol: ospf
--       source_protocol_codes: O%  
-```
-```
-cat diff/diff_ospf_iosxe_CSR2_ops.txt   
---- pre-change/ospf_iosxe_CSR2_ops.txt
-+++ post-change/ospf_iosxe_CSR2_ops.txt
- info:
-  vrf:
-   default:
-    address_family:
-     ipv4:
-      instance:
-       1:
-        areas:
-         0.0.0.0:
-          interfaces:
--          Loopback0:
--           bfd:
--            enable: False
--           cost: 1
--           demand_circuit: False
--           enable: True
--           interface_type: loopback
--           name: Loopback0% 
-```
-
-As we can see, CSR1 has lost the the route to the `2.2.2.2/32` prefix and on CSR2 the interface `lo0` has been removed from `OSPF area 0`.
-
-
-## pyATS and Python
-
-As you would expect, it is also very easy to work with pyATS and python. Type `python` in your terminal, and then start by importing the `load` module from the `genie.testbed` library and load the testbed file: 
-
-```
-from genie.testbed import load
-testbed = load('testbed.yaml') 
-```
-Then connect to the CSR1 device: 
-```
-device = testbed.devices['CSR1']
-device.connect()
-```
-Then parse the command `show ip interface brief` and print the output nicely using the `pprint` library:
-```
-parsed_data = device.parse('show ip interface brief')
-from pprint import pprint 
-pprint(parsed_data)
-{'interface': {'GigabitEthernet1': {'interface_is_ok': 'YES',
-                                    'ip_address': '10.0.0.15',
-                                    'method': 'manual',
-                                    'protocol': 'up',
-                                    'status': 'up'},
-               'GigabitEthernet2': {'interface_is_ok': 'YES',
-                                    'ip_address': '192.168.1.1',
-                                    'method': 'manual',
-                                    'protocol': 'up',
-                                    'status': 'up'},
-               'Loopback0': {'interface_is_ok': 'YES',
-                             'ip_address': '1.1.1.1',
-                             'method': 'manual',
-                             'protocol': 'up',
-                             'status': 'up'}}}
-```
-Lastly, close the connection to the device:
-```
-device.disconnect()
-```
-
-As you can imagine, the possibilities are endless and you can see an example of a script that gets and prints OSPF Neighbor table for a given device in the file `ospf_neighbor_table.py`. Run the script and you will get a nicely formatted table of the OSPF neighbors for CRS1:
-
-```
-python ospf_neighbor_table.py
-
-OSPF Neighbor Table for CSR1
-+------------------+----------+-------------+---------+
-|    Interface     | Neighbor |   Address   |  State  |
-+------------------+----------+-------------+---------+
-| GigabitEthernet2 | 2.2.2.2  | 192.168.1.2 | FULL/DR |
-+------------------+----------+-------------+---------+
-```
-
-## pyATS Test Scripts and Jobs
-So far we have only scratched the surface of what you can do with pyATS, and test scripts will take your automated testing to the next level. Test scripts are written and executed with the [AEtest Python package](https://developer.cisco.com/docs/pyats/api/)
-
-I have included an example test script called `connectivity_check.py`, which is adapted from the example script in the [official documentation](https://developer.cisco.com/docs/pyats/api/). This script tests that both CSR1 and CSR2 can ping each other's loopback addresses. Test scripts are structured Python files that contain/describe the testing you want to do. A clean, elegant test script is scalable, and generates easy-to-read test results and logs.
-
-To run the example test script, you must also specify the testbed file that is to be used, for example: 
-
-```
-python connectivity_check.py --testbed testbed.yaml
-```
-
-Once the test script has been run then the results are displayed in the output: 
-
-```
-2024-04-23T11:50:16: %AETEST-INFO: +------------------------------------------------------------------------------+
-2024-04-23T11:50:16: %AETEST-INFO: |                               Detailed Results                               |
-2024-04-23T11:50:16: %AETEST-INFO: +------------------------------------------------------------------------------+
-2024-04-23T11:50:16: %AETEST-INFO:  SECTIONS/TESTCASES                                                      RESULT   
-2024-04-23T11:50:16: %AETEST-INFO: --------------------------------------------------------------------------------
-2024-04-23T11:50:16: %AETEST-INFO: .
-2024-04-23T11:50:16: %AETEST-INFO: |-- common_setup                                                          PASSED
-2024-04-23T11:50:16: %AETEST-INFO: |   |-- check_topology                                                    PASSED
-2024-04-23T11:50:16: %AETEST-INFO: |   `-- establish_connections                                             PASSED
-2024-04-23T11:50:16: %AETEST-INFO: |       |-- Step 1: Connecting to CSR1                                    PASSED
-2024-04-23T11:50:16: %AETEST-INFO: |       `-- Step 2: Connecting to CSR2                                    PASSED
-2024-04-23T11:50:16: %AETEST-INFO: |-- PingTestcase[device=device1]                                          PASSED
-2024-04-23T11:50:16: %AETEST-INFO: |   |-- ping[destination=192.168.1.1]                                     PASSED
-2024-04-23T11:50:16: %AETEST-INFO: |   `-- ping[destination=192.168.1.2]                                     PASSED
-2024-04-23T11:50:16: %AETEST-INFO: |-- PingTestcase[device=device2]                                          PASSED
-2024-04-23T11:50:16: %AETEST-INFO: |   |-- ping[destination=192.168.1.1]                                     PASSED
-2024-04-23T11:50:16: %AETEST-INFO: |   `-- ping[destination=192.168.1.2]                                     PASSED
-2024-04-23T11:50:16: %AETEST-INFO: `-- common_cleanup                                                        PASSED
-2024-04-23T11:50:16: %AETEST-INFO:     `-- disconnect                                                        PASSED
-2024-04-23T11:50:16: %AETEST-INFO:         |-- Step 1: Disconnecting from CSR1                               PASSED
-2024-04-23T11:50:16: %AETEST-INFO:         `-- Step 2: Disconnecting from CSR2                               PASSED
-2024-04-23T11:50:16: %AETEST-INFO: +------------------------------------------------------------------------------+
-2024-04-23T11:50:16: %AETEST-INFO: |                                   Summary                                    |
-2024-04-23T11:50:16: %AETEST-INFO: +------------------------------------------------------------------------------+
-2024-04-23T11:50:16: %AETEST-INFO:  Number of ABORTED                                                            0 
-2024-04-23T11:50:16: %AETEST-INFO:  Number of BLOCKED                                                            0 
-2024-04-23T11:50:16: %AETEST-INFO:  Number of ERRORED                                                            0 
-2024-04-23T11:50:16: %AETEST-INFO:  Number of FAILED                                                             0 
-2024-04-23T11:50:16: %AETEST-INFO:  Number of PASSED                                                             4 
-2024-04-23T11:50:16: %AETEST-INFO:  Number of PASSX                                                              0 
-2024-04-23T11:50:16: %AETEST-INFO:  Number of SKIPPED                                                            0 
-2024-04-23T11:50:16: %AETEST-INFO:  Total Number                                                                 4 
-2024-04-23T11:50:16: %AETEST-INFO:  Success Rate                                                            100.0% 
-2024-04-23T11:50:16: %AETEST-INFO: --------------------------------------------------------------------------------
-```
-
-pyATS Jobs take test scripts to another level and allow the execution of test scripts as tasks. This is beyond the scope of this document but you can read all about pyATS jobs in the [official docs](https://developer.cisco.com/docs/pyats/api/)
\ No newline at end of file
diff --git a/docs/netbox-integrations/servicenow/index.md b/docs/netbox-integrations/servicenow/index.md
deleted file mode 100644
index 3b6530a0..00000000
--- a/docs/netbox-integrations/servicenow/index.md
+++ /dev/null
@@ -1,76 +0,0 @@
-## ServiceNow Integration Overview
-
-The **NetBox ServiceNow Integration** provides API and CMDB integration capabilities between ServiceNow and NetBox instances. This application enables bidirectional synchronization of infrastructure data, allowing organizations to maintain consistent configuration management data across both platforms.
-
-**ServiceNow Compatibility**: Certified for Washington DC and Xanadu versions.
-
-### Key Features
-
-- **Bidirectional Synchronization**: Synchronize configuration items between ServiceNow CMDB and NetBox
-- **Automated Data Import**: Import NetBox objects (devices, device types, sites, locations, etc.) into ServiceNow through import sets
-- **Real-time Integration**: API-based integration for real-time data exchange
-- **Data Validation**: Built-in validation and correlation mechanisms to ensure data integrity
-- **Extensible Architecture**: Modular design using ServiceNow Flow Designer and Integration Hub actions
-- **Security Integration**: Role-based access controls and secure API communication
-
-### NetBox to ServiceNow Object Mapping
-
-The following table shows the supported NetBox objects and their corresponding destinations in ServiceNow:
-
-| NetBox Object | ServiceNow Destination | Mapping Details |
-|---------------|------------------------|-----------------|
-| **Device** | Configuration Item (cmdb_ci) | Mapped to appropriate CI class based on device role and type |
-| **Device Type** | Hardware Product Model (cmdb_hardware_product_model) | Device specifications, manufacturer, and model information |
-| **Site** | Location (cmn_location) | Physical site information and geographical data |
-| **Region** | Location (cmn_location) | Geographic regions as top-level locations |
-| **Manufacturer** | Company (core_company) | Vendor/manufacturer information |
-| **Tenant** | Department (cmn_department) | Organizational units and client information |
-| **Device Role** | CI Classification | Maps to ServiceNow CI classification and categories |
-
-### Business Value
-
-- Centralized configuration management across multiple platforms
-- Reduced manual data entry and associated errors
-- Improved visibility into infrastructure assets
-- Enhanced change management processes
-- Streamlined compliance reporting
-
-
-### Technical Architecture
-
-The application is built as a ServiceNow scoped application (`x_990381_netbox_cl`) and includes:
-
-- Custom tables for NetBox data import staging
-- Extended ServiceNow CMDB tables with NetBox-specific fields
-- Flow Designer flows for automated synchronization processes
-- Integration Hub spokes for NetBox API connectivity
-- Business rules and UI actions for user interaction
-
-## Obtaining the Application
-
-The NetBox CMDB Integration application is currently distributed as XML update sets. To obtain the application:
-
-### Prerequisites
-
-Before requesting the application, ensure your organization meets the following requirements:
-
-- **ServiceNow Integration Purchased**: Purchased the ServiceNow Integration from NetBox Labs
-- **ServiceNow Instance**: Active ServiceNow instance with appropriate licensing
-- **NetBox Environment**: Operational NetBox instance with API access
-- **Administrator Access**: ServiceNow administrator privileges for application installation
-- **ServiceNow MID Server (NetBox Enterprise Only)**: MID server installed on-prem to handle communication between ServiceNow and NetBox Enterprise
-
-### Obtaining Access
-
-1. **Contact NetBox Labs**: Reach out to your NetBox Labs support team or account manager
-2. **Request Access**: Submit a request for the NetBox CMDB Integration application for ServiceNow
-3. **Receive Update Set**: NetBox Labs will provide you with the XML update set file(s)
-
-
-## Version Information
-- **Application Version**: 1.4
-- **Dependencies**: 
-  - System Import Sets
-  - Model Management
-  - Configuration Management (CMDB)
-  - System (apps/system_user)
diff --git a/docs/netbox-integrations/servicenow/snow-faq.md b/docs/netbox-integrations/servicenow/snow-faq.md
deleted file mode 100644
index e7eba391..00000000
--- a/docs/netbox-integrations/servicenow/snow-faq.md
+++ /dev/null
@@ -1,344 +0,0 @@
-# FAQ and Troubleshooting
-
-## Installation Issues
-
-### Update set installation won't get past the Preview phase
-
-**Common Causes:**
-- **Missing Dependencies**: Ensure all required plugins are installed (IntegrationHub Starter Pack, Model Management, System Import Sets)
-- **Version Incompatibility**: Verify the update set version matches your ServiceNow instance version
-- **Insufficient Privileges**: Confirm you have admin privileges on the ServiceNow instance
-- **Conflicting Customizations**: Local customizations may conflict with the application
-
-**Resolution Steps:**
-1. Check the preview log for specific error messages
-2. Verify all dependencies are installed and activated
-3. Review any conflicts shown in the preview results
-4. Contact NetBox Labs support if errors persist
-
-### What can I check to see that installation went well?
-
-**Verification Checklist:**
-1. **Application Menu**: Verify "NetBox" application appears in the application navigator
-2. **Tables Created**: Check that new tables are present:
-   - `x_990381_netbox_cl_netbox_parameters`
-   - `x_990381_netbox_cl_devices_import_set`
-   - `x_990381_netbox_cl_device_types_import_set`
-   - `x_990381_netbox_cl_netbox_sites_import`
-3. **Extended Fields**: Verify NetBox fields are added to existing tables:
-   - `cmdb_ci.x_990381_netbox_cl_netbox_correlation_id`
-   - `cmn_location.x_990381_netbox_cl_netbox_synchronize`
-4. **Guided Setup**: Access **All > NetBox > Configuration > Guided Setup** successfully
-5. **No Critical Errors**: Check system logs for any critical errors during installation
-
-### What new tables are included with the application?
-
-**Import Set Tables:**
-- `x_990381_netbox_cl_devices_import_set` - NetBox devices staging
-- `x_990381_netbox_cl_device_types_import_set` - NetBox device types staging  
-- `x_990381_netbox_cl_netbox_sites_import` - NetBox sites staging
-- `x_990381_netbox_cl_netbox_regions_import` - NetBox regions staging
-- `x_990381_netbox_cl_netbox_clients_import` - NetBox tenants/clients staging
-- `x_990381_netbox_cl_netbox_departments_imports` - NetBox departments staging
-- `x_990381_netbox_cl_netbox_manufacturers_import` - NetBox manufacturers staging
-
-**Configuration Tables:**
-- `x_990381_netbox_cl_netbox_parameters` - Application configuration parameters
-- `x_990381_netbox_cl_netbox_notification_queue` - NetBox notification queue
-
-### Under which license should I subscribe the new tables?
-
-**Licensing Guidance:**
-- **Import Set Tables**: These are typically covered under the base ServiceNow platform license as they are temporary staging tables
-- **Configuration Tables**: These tables would usually be licensed under the ITSM allotment, but can be included wherever some allotments remain
-- **Extended Fields**: No additional licensing required as they extend existing licensed tables
-
-**Recommendation**: Consult with your ServiceNow account manager for specific licensing questions, as requirements may vary based on your ServiceNow contract and usage.
-
-## Guided Setup Issues
-
-### I'm missing some plugins and don't have a license for them
-
-**Required vs. Recommended Plugins:**
-- **Essential Plugins** (Required):
-  - IntegrationHub Starter Pack
-  - System Import Sets
-  - Model Management
-- **Recommended Plugins** (Optional):
-  - Additional IntegrationHub spokes for enhanced functionality
-
-**Resolution Options:**
-1. **Contact ServiceNow**: Request licensing for required plugins through your ServiceNow account manager
-2. **PDI Users**: Activate plugins through the PDI configuration screen
-3. **Alternative Approach**: Some functionality may be limited without optional plugins, but core integration will still work
-
-### What's the purpose of manually creating an HTTP(s) connection record?
-
-**Purpose and Importance:**
-- **Application package**: This record cannot be packaged with the NetBox CMDB Integration scoped application and must therefore be created manually during the setup process
-- **API Communication**: Establishes the connection between ServiceNow and your NetBox instance
-- **Authentication**: Stores connection parameters and credential references
-- **MID Server Support**: Configures routing through MID servers if required
-- **Standardization**: Uses ServiceNow's standard HTTP connection framework for reliability
-
-**Key Requirements:**
-- **Name**: Must be exactly "NetBox API" (serves as a key for the application)
-- **Connection Alias**: Must be `x_990381_netbox_cl.NetBox_API`
-- **URL Format**: Must not include trailing slash
-
-### Both our NetBox and ServiceNow instances are in the cloud but we have a MID server on premises, should I configure it in step 2.1 or 2.2 of the guided setup?
-
-**Recommendation**: **Configure in Step 2.1** (Create the HTTP(s) connection record)
-
-**Reasoning:**
-- If both instances are in the cloud, direct communication is typically possible
-- MID server configuration should only be used if network policies require it
-- Step 2.2 is for optional modifications after initial setup
-
-**Decision Factors:**
-- **Network Policies**: Check if your organization requires all API traffic to route through the MID server
-- **Security Requirements**: Some organizations mandate MID server usage for all external connections
-- **Performance**: Direct cloud-to-cloud communication is typically faster
-
-**Testing Approach**: Try without MID server first, then add it in Step 2.2 if connection tests fail.
-
-### The connection test keeps failing, how do I troubleshoot connections?
-
-**Systematic Troubleshooting:**
-
-1. **Verify Basic Connectivity**
-   - Check for firewall restrictions between instances
-   - Verify DNS resolution of NetBox hostname
-
-2. **Check API Token Format**
-   - Ensure API token is exactly 32 hexadecimal characters
-   - Verify token is active in NetBox
-   - Test token manually using curl or Postman
-
-3. **Validate Connection Record**
-   - Confirm connection name is exactly "NetBox API"
-   - Verify URL has no trailing slash
-   - Check credential association is correct
-
-4. **Review Network Configuration**
-   - Check MID server configuration if applicable
-   - Verify proxy settings if required
-   - Test from ServiceNow's network diagnostic tools
-
-5. **Check Logs**
-   - Review ServiceNow system logs for detailed error messages
-   - Check NetBox logs for incoming connection attempts
-   - Look for authentication or authorization errors
-
-## Application Parameters
-
-### What are the important Application parameters to know about initially?
-
-**Critical Parameters for Initial Setup:**
-
-| Parameter | Purpose | Default Value |
-|-----------|---------|---------------|
-| **NetBox Log Level** | Controls application logging verbosity | Medium |
-| **API user in NetBox** | Username for ServiceNow→NetBox API calls | servicenow_integration |
-| **API user in ServiceNow** | Username for NetBox→ServiceNow API calls | netbox_integration |
-| **Import [Object Types]** | Enable/disable synchronization from NetBox to ServiceNow (import direction) for specific objects | false |
-| **Export [Object Types]** | Enable/disable synchronization from ServiceNow to NetBox (export direction) for specific objects | false |
-
-**Navigation**: Go to **All > NetBox > Configuration > Parameters** to view and modify these settings.
-
-### What are the Synchronize and Sync direction parameters used for?
-
-**Synchronize Parameters** (Boolean - true/false):
-- **Purpose**: Not used
-
-**Sync Direction Parameters** (String values):
-- **Purpose**: Not used
-
-
-### How can I tell the application to increase the logging level?
-
-**Steps to Increase Logging:**
-
-1. **Navigate to Parameters**
-   - Go to **All > NetBox > Configuration > Parameters**
-   - Find the "NetBox Log Level" parameter
-
-2. **Available Log Levels** (case insensitive):
-   - **None**: No logging
-   - **Low**: Basic operational messages
-   - **Medium**: Moderate detail including warnings (default)
-   - **High**: Detailed debug information
-
-3. **Change Log Level**
-   - Edit the "NetBox Log Level" parameter
-   - Set value to "High" for maximum detail
-   - Save the parameter
-
-4. **View Logs**
-   - Check **All > NetBox > Maintenance > NetBox Logs** for NetBox-related entries
-
-### What are the NetBox Tenant Group ID parameters used for?
-
-**Purpose**: These parameters map NetBox tenant groups to ServiceNow organizational structures.
-
-**Key Parameters:**
-- **NetBox Tenant Group ID for Customers**: Maps NetBox tenants to ServiceNow customer companies
-- **NetBox Tenant Group ID for Departments**: Maps NetBox tenants to ServiceNow departments
-
-**Usage:**
-- **Import**: Only tenants belonging to specified tenant groups are imported into Companies or Departments tables
-- **Export**: ServiceNow records are assigned to these tenant groups in NetBox
-- **Format**: Integer value representing the NetBox tenant group ID
-
-**Configuration**: Set these during guided setup or modify in the Parameters table.
-
-### Why do some parameters have a value of "Not used"?
-
-**Explanation**: Parameters with "Not used" values are **placeholders for future functionality**.
-
-**Examples:**
-- Role ID parameters for specific CI classes (Server, IP Switch, Virtualization Server)
-- Features planned for future releases but not yet implemented
-
-**Current Behavior**:
-- These parameters are ignored by the current application logic
-- "Role ID - Generic" is used instead for all device types
-- No action required from users
-
-**Future Updates**: These parameters will become functional in future application releases.
-
-### Why not use the sys_properties table instead of a custom table for parameters?
-
-**Design Rationale:**
-
-**Advantages of Custom Table:**
-- **Scoped Isolation**: Parameters are contained within the application scope
-- **Enhanced Metadata**: Supports detailed descriptions and ordering
-- **Guided Setup Integration**: Easier integration with setup wizards
-- **Backup/Restore**: Parameters are included in application update sets
-- **Security**: Scoped access controls
-
-**Limitations of sys_properties:**
-- Global scope could cause conflicts
-- Limited metadata support
-- More complex guided setup integration
-- Potential interference with other applications
-
-### What is the nbk parameter for?
-
-**Purpose**: The `nbk` parameter is a **temporary administrative credential** used during the guided setup process.
-
-**Details:**
-- **Temporary Nature**: Created during guided setup and automatically deleted afterward
-- **Elevated Privileges**: Provides admin-level access to NetBox for configuration
-- **Security**: Ensures only low-privilege accounts remain after setup completion
-- **Usage**: Enables ServiceNow to configure NetBox settings during initial setup
-
-**Important**: This parameter should not exist after guided setup completion. If it persists, it may indicate an incomplete setup process. If you think the setup has concluded normally, you can and should delete the parameter from the table.
-
-## Operations
-
-### Data is not getting synchronized between ServiceNow and NetBox
-
-**Troubleshooting Steps:**
-
-1. **Check Synchronization Parameters**
-   - Verify "Export [Object]" parameters are set to `true`
-   - Check that specific records have "NetBox Synchronize" field set to `true`
-
-2. **Verify Connection Health**
-   - Test API connectivity in both directions by navigating to **All >`NetBox > Maintenance > Test connections**
-   - Check credential validity and expiration
-   - Review HTTP connection record configuration
-
-3. **Review Flow Execution**
-   - Check **All > Process Automation > Flow Designer > Executions**
-   - Look for failed or stuck flow executions
-   - Review error messages in execution logs
-   - Increase NetBox Log Level parameter if logs are not verbose enough
-
-4. **Check Import Set Processing**
-   - Navigate to **All > System Import Sets > Import Sets**
-   - Verify import sets are being created and processed
-   - Check for transformation errors
-
-5. **Check Data Sources**
-   - Navigate to **All > NetBox > Configuration > Data Sources**
-   - Verify that data sources don't contain more than one attachment
-   - Verify that the NetBox Buffer data source is being gradually emptied over time
-
-6. **Validate Data Requirements**
-   - Ensure required fields are populated
-   - Check for data validation failures
-   - Verify correlation IDs are properly set
-
-### Data is not getting synchronized between NetBox and ServiceNow
-
-**Specific NetBox→ServiceNow Issues:**
-
-1. **Verify Connection Health**
-   - Test API connectivity in both directions by navigating to **All >`NetBox > Maintenance > Test connections**
-   - Check credential validity and expiration
-   - Review HTTP connection record configuration
-
-2. **Webhook Configuration**
-   - Verify NetBox webhooks are properly configured
-   - Check webhook URL points to correct ServiceNow instance
-   - Confirm webhook authentication credentials
-
-3. **NetBox Event Rules**
-   - Ensure event rules are active in NetBox
-   - Verify event rules trigger on appropriate object changes
-   - Check event rule conditions and actions
-
-4. **ServiceNow Inbound Processing**
-   - Check **All > System Web Services > Inbound > REST Messages**
-   - Review inbound API call logs
-   - Verify authentication is successful
-
-5. **Import Processing**
-   - Check import set creation from NetBox data
-   - Review transformation map execution
-   - Verify target table updates
-
-### How do I pause synchronization between systems, one way or another?
-
-**Temporary Pause Options:**
-
-**Option 1: Disable Synchronization Parameters**
-- Navigate to **All > NetBox > Configuration > Parameters**
-- Set "Import [Object]" and "Export [Object]" parameters to `false` for affected object types
-- This stops all synchronization for those objects
-
-**Option 2: Record-Level Control**
-- Set "NetBox Synchronize" field to `false` on specific records
-- This provides granular control over individual items
-
-**Option 3: Connection Disruption** (Emergency only)
-- Modify HTTP connection record to invalid URL
-- Remove or invalidate API credentials
-- **Warning**: This may cause errors in logs
-
-**Resuming Synchronization:**
-- Reverse the changes made during pause
-- Verify connection tests pass
-- Monitor initial synchronization for any issues
-
-**Best Practice**: Use Option 1 (parameter-based) for planned maintenance, as it's the cleanest approach and doesn't generate error messages.
-
-### I'm getting duplicate records in ServiceNow or NetBox
-
-Duplicate records can occur during synchronization due to various factors such as data inconsistencies or identification rule challenges.
-
-**Mitigation Steps**:
-
-1. **Review Correlation IDs**
-   - Check that NetBox Correlation ID fields are properly populated
-   - Verify correlation IDs are unique and consistent between systems
-
-2. **Manual Cleanup**
-   - Identify duplicate records
-   - Manually merge or delete duplicates as appropriate
-   - Document patterns for NetBox Labs support
-
-**Future Improvements**: NetBox Labs is developing enhanced IRE rules and automated deduplication capabilities that will be included in future releases to minimize this issue.
diff --git a/docs/netbox-integrations/servicenow/snow-installation.md b/docs/netbox-integrations/servicenow/snow-installation.md
deleted file mode 100644
index 0118949c..00000000
--- a/docs/netbox-integrations/servicenow/snow-installation.md
+++ /dev/null
@@ -1,188 +0,0 @@
-# Installation and Setup
-
-## Before Starting
-
-Before you start the installation, ensure the following requirements are met:
-
-- **Administrative Privileges**: You must be logged in with admin privileges on both NetBox and ServiceNow instances
-- **ServiceNow Version**: Washington DC or Xanadu (certified versions)
-- **IntegrationHub License**: Your ServiceNow instance must be licensed for IntegrationHub Starter Pack for proper integration functionality
-
-## Uploading and Committing the Application
-
-Follow these steps to install the NetBox ServiceNow Integration application in your ServiceNow instance:
-
-1. **Navigate to Retrieved Update Sets**
-   - Go to **All > System Update Sets > Retrieved Update Sets**
-
-2. **Import the Update Set**
-   - Navigate to the **Related Links** section at the bottom of the list
-   - Click on **Import Update Set From XML**
-   - Select the **NetBox CMDB Integration** application file and click **Upload**
-   - ⏱️ *This operation may take several minutes*
-
-3. **Preview the Update Set**
-   - Once the file has uploaded, click on the **Preview** button
-   - ⏱️ *This operation may take several minutes*
-   - Review and skip any conflicts
-
-4. **Commit the Update Set**
-   - After the preview is complete, click the **Commit** button
-   - ⏱️ *This operation may take several minutes*
-
-5. **Handle Any Errors**
-   - If any errors occur during commit, check the Release Notes to determine which errors can safely be ignored
-   - Document any persistent errors for support escalation if needed
-
-## Configuration Using Guided Setup
-
-After successful installation, use the built-in Guided Setup to configure the application:
-
-### Accessing the Guided Setup
-
-1. Navigate to Guided Setup
-   - Go to **All > NetBox > Configuration > Guided Setup**
-   - Review the **Pre-checklist** and fulfill any outstanding requirements
-   - Click **Get Started** when ready
-
-## Phase 1: Plugins
-
-The guided setup begins with ensuring required plugins are installed:
-
-### Step 1.1: Install Basic Plugins
-- Install essential plugins required for basic functionality
-- These plugins are mandatory for the integration to work
-
-### Step 1.2: Install Recommended Plugins  
-- Install additional plugins that enhance functionality
-- These plugins are recommended but not strictly required
-
-📝 *Note: Plugin installation runs in the background. You don't need to wait for completion before proceeding to the next phase.*
-
-## Phase 2: Post-Installation Setup
-
-Complete the following configuration steps:
-
-### Step 2.1: Create the HTTP(s) Connection Record
-
-**Configure the primary connection to your NetBox instance:**
-
-1. **Required Fields:**
-   - **Name**: `NetBox API` ⚠️ *(case sensitive and must match exactly*
-   - **Connection Alias**: `x_990381_netbox_cl.NetBox_API`
-   - **Host**: Your NetBox instance hostname or IP address
-   - **Connection URL**: `https://instanceNameOrIP` ⚠️ *(no trailing slash)*
-
-2. **MID Server Configuration** (NetBox Enterprise Only):
-   - Select **Use MID** if your NetBox instance is only accessible through a MID server
-   - Configure MID server parameters as needed
-
-3. **Save the Record**
-   - Save the connection record
-   - Mark the step as complete
-
-### Step 2.2: (Optional) HTTP(s) Connection Setup
-
-- This step allows you to modify connection parameters if needed later in the setup
-- Return to this step if connection adjustments are required
-
-### Step 2.3: Create Application Parameters
-
-Configure application parameters based on your installation scenario:
-
-**For New Installations:**
-- When prompted: *"No existing NetBox parameters detected, this looks like a new install. Parameters will be created after pressing Save"*
-- Press **Save** to create new parameters with default values
-
-**For Existing Installations:**
-- The system displays the number of existing parameters
-- Choose whether to overwrite existing parameters with default values
-- Missing parameters will be automatically recreated with default values
-
-### Step 2.4: Setup Temporary Admin Connection to NetBox
-
-**Establish elevated access for configuration:**
-
-1. **Purpose and Security**
-   - Creates temporary elevated privileges on your NetBox instance for automated configuration
-   - This temporary channel enables ServiceNow to configure NetBox during setup
-   - **Important**: The channel is automatically removed at the end of setup
-   - Only low-privilege accounts remain after completion
-
-2. **Configuration**
-   - Follow on-screen instructions to establish the temporary communication channel
-   - Provide temporary admin credentials for your NetBox instance
-
-### Step 2.5: Setup ServiceNow to NetBox Credentials
-
-**Create credentials for ServiceNow to access NetBox API:**
-
-1. **Create API Credentials on NetBox**
-   - Configure the following fields:
-     - **Username**: Set appropriate username
-     - **Password**: Set secure password  
-     - **API Token**: Generate API token
-
-2. **Critical API Token Requirements**
-   - ⚠️ **MANDATORY**: The API Token MUST be a hexadecimal string of exactly 32 characters
-   - Example format: `a1b2c3d4e5f67890abcdef1234567890`
-
-3. **Troubleshooting Connection Issues**
-   - If errors occur, verify:
-     - API Token format (32-character hexadecimal string)
-     - HTTP(s) connection record configuration (Step 2.1)
-     - Temporary admin credentials (Step 2.4)
-
-### Step 2.6: Associate Credentials
-
-**Link credentials to the connection record:**
-
-1. **Manual Association Required**
-   - Follow on-screen instructions to manually associate the credentials created in Step 2.5
-   - Link to the HTTP(s) Connection record created in Step 2.1
-   - **Remember to save** before proceeding to the next step
-
-### Step 2.7: Setup NetBox to ServiceNow Credentials
-
-**Create credentials for NetBox to access ServiceNow API:**
-
-1. **Create ServiceNow API Access**
-   - Configure the following:
-     - **Username**: Set appropriate username (modifiable)
-     - **Password**: Set secure password (modifiable)
-     - **API Key**: Automatically generated (do not modify)
-
-2. **Integration Notes**
-   - Credentials are stored locally and in your NetBox instance
-   - ServiceNow credentials are stored in NetBox webhook headers
-
-3. **Troubleshooting**
-   - If errors occur, verify:
-     - HTTP(s) connection record configuration (Step 2.1)
-     - Temporary admin credentials (Step 2.4)
-
-### Step 2.8: Test Connections
-
-**Validate bidirectional connectivity:**
-
-1. **Connection Testing**
-   - Test ServiceNow to NetBox communication
-   - Test NetBox to ServiceNow communication
-   - Verify API responses and authentication
-
-2. **Validation Steps**
-   - Confirm all connection parameters are correct
-   - Validate credential associations
-   - Monitor for any errors or warnings
-
-## Common Installation Issues
-
-| Issue | Possible Cause | Solution |
-|-------|---------------|----------|
-| Update Set Import Fails | File corruption or version mismatch | Re-download update set from NetBox Labs |
-| Plugin Installation Errors | Missing dependencies or insufficient permissions | Verify ServiceNow admin privileges and dependency requirements |
-| Connection Test Fails | Network connectivity or firewall issues | Check network configuration and firewall rules |
-| API Token Rejected | Incorrect token format | Ensure API token is exactly 32 hexadecimal characters |
-| Credential Association Fails | Timing or configuration issues | Retry association after verifying all previous steps |
-| Temporary Admin Channel Failed | Invalid NetBox admin credentials | Verify NetBox admin credentials and permissions |
-
diff --git a/docs/netbox-integrations/servicenow/snow-technical-info.md b/docs/netbox-integrations/servicenow/snow-technical-info.md
deleted file mode 100644
index 9c05e8e0..00000000
--- a/docs/netbox-integrations/servicenow/snow-technical-info.md
+++ /dev/null
@@ -1,64 +0,0 @@
-# Technical Information
-
-
-## New Tables in ServiceNow
-
-The NetBox CMDB Integration application creates several new tables in ServiceNow for staging imported data from NetBox:
-
-### Import Set Tables
-
-| Table Name | Purpose | Key Fields |
-|------------|---------|------------|
-| `x_990381_netbox_cl_devices_import_set` | Staging table for NetBox devices | Device name, serial, asset tag, device type, site, location, status |
-| `x_990381_netbox_cl_device_types_import_set` | Staging table for NetBox device types | Model, manufacturer, height, weight, specifications |
-| `x_990381_netbox_cl_netbox_sites_import` | Staging table for NetBox sites | Site name, description, physical address, contact information |
-| `x_990381_netbox_cl_netbox_regions_import` | Staging table for NetBox regions | Region name, description, hierarchy |
-| `x_990381_netbox_cl_netbox_clients_import` | Staging table for NetBox tenants/clients | Client name, description, contact details |
-| `x_990381_netbox_cl_netbox_departments_imports` | Staging table for NetBox departments | Department information and organizational structure |
-| `x_990381_netbox_cl_netbox_manufacturers_import` | Staging table for NetBox manufacturers | Manufacturer name, description, contact information |
-| `x_990381_netbox_cl_netbox_notification_queue` | Queue for NetBox notifications | Notification type, status, payload |
-| `x_990381_netbox_cl_netbox_parameters` | Configuration parameters | Parameter name, value, description |
-
-
-## Extended ServiceNow Tables
-
-The application extends existing ServiceNow tables with NetBox-specific fields:
-
-### Configuration Item (cmdb_ci)
-| Field Name | Type | Purpose |
-|------------|------|---------|
-| `x_990381_netbox_cl_netbox_correlation_id` | String | Unique identifier linking ServiceNow CI to NetBox object |
-| `x_990381_netbox_cl_netbox_synchronize` | Boolean | Flag indicating if CI should be synchronized with NetBox |
-
-### Location (cmn_location)
-| Field Name | Type | Purpose |
-|------------|------|---------|
-| `x_990381_netbox_cl_netbox_correlation_id` | String | Unique identifier linking ServiceNow location to NetBox location |
-| `x_990381_netbox_cl_netbox_synchronize` | Boolean | Flag indicating if location should be synchronized with NetBox |
-| `x_990381_netbox_cl_level` | Integer | Hierarchical level in NetBox location structure |
-
-### Hardware Product Model (cmdb_hardware_product_model)
-| Field Name | Type | Purpose |
-|------------|------|---------|
-| `x_990381_netbox_cl_netbox_correlation_id` | String | Links ServiceNow model to NetBox device type |
-| `x_990381_netbox_cl_netbox_synchronize` | Boolean | Flag indicating if location should be synchronized with NetBox |
-
-### Department (cmn_department)
-| Field Name | Type | Purpose |
-|------------|------|---------|
-| `x_990381_netbox_cl_netbox_correlation_id` | String | Links ServiceNow department to NetBox tenant |
-| `x_990381_netbox_cl_netbox_synchronize` | Boolean | Flag indicating if location should be synchronized with NetBox |
-
-### Company (core_company)
-| Field Name | Type | Purpose |
-|------------|------|---------|
-| `x_990381_netbox_cl_netbox_correlation_id` | String | Links ServiceNow company to NetBox organization |
-| `x_990381_netbox_cl_netbox_synchronize` | Boolean | Flag indicating if location should be synchronized with NetBox |
-
-## Data Synchronization Flow
-
-1. **Import Phase**: NetBox data is retrieved via API and staged in import set tables
-2. **Transform Phase**: Import set processors transform and validate data according to mapping rules
-3. **Load Phase**: Transformed data is inserted/updated in target ServiceNow tables
-4. **Correlation Phase**: NetBox correlation IDs are maintained for bidirectional synchronization
-5. **Export Phase**: ServiceNow changes are propagated back to NetBox when synchronization is enabled
diff --git a/docs/netbox-integrations/servicenow/snow-upgrading.md b/docs/netbox-integrations/servicenow/snow-upgrading.md
deleted file mode 100644
index e1b964e3..00000000
--- a/docs/netbox-integrations/servicenow/snow-upgrading.md
+++ /dev/null
@@ -1,108 +0,0 @@
-# Upgrades and Bug Fixes
-
-## Distribution and Installation
-
-Upgrades, patches, and hotfixes for the NetBox CMDB Integration application are distributed through XML update sets, which can be obtained from NetBox Labs support.
-
-
-### Critical: Review Update Status
-
-After committing any update set, it is **essential** to review the update status for potential skipped records:
-
-1. **Access Update Status**
-   - Navigate to **All > Upgrade Center > Upgrade History**
-   - Click on the related list link in colomn "Skipped"
-
-2. **Identify Skipped Records**
-   - Skipped records indicate potential conflicts or issues
-   - Common causes include:
-     - Local customizations conflicting with updates
-     - Missing dependencies
-     - Permission restrictions
-     - Data validation failures
-
-3. **Resolution Actions**
-   - Review each skipped record individually
-   - Determine if manual intervention is required
-   - Consult with your system administrator if needed
-   - Document any unresolved skips for support escalation
-
-4. **ServiceNow Documentation**
-   - For detailed guidance on handling skipped records, refer to the official ServiceNow documentation.
-
-## Update Types and Considerations
-
-### Major Version Upgrades
-- **Planning Required**: May include significant changes to data model or functionality
-- **Testing Recommended**: Test in development environment before production deployment
-- **Backup Advised**: Create system backup before applying major updates
-- **Documentation Review**: Review release notes for breaking changes or new requirements
-
-### Patches and Minor Updates
-- **Focused Changes**: Target specific issues or improvements
-- **Lower Risk**: Generally safer to apply directly to production
-- **Cumulative**: May include fixes from previous patches
-- **Quick Deployment**: Usually faster to install and commit
-
-### Hotfixes
-- **Urgent Nature**: Address critical issues requiring immediate attention
-- **Emergency Process**: May bypass standard testing procedures
-- **Limited Scope**: Focus on specific critical problems
-- **Rapid Deployment**: Prioritized for quick resolution
-
-## Best Practices for Updates
-
-### Pre-Update Preparation
-1. **Environment Assessment**
-   - Document current application version
-   - Note any local customizations
-   - Review system compatibility
-
-2. **Backup Strategy**
-   - Create update set backup of current configuration
-   - Document critical business processes
-   - Ensure rollback plan is available
-
-3. **Testing Protocol**
-   - Test updates in development environment when possible
-   - Validate core functionality after update
-   - Verify integration points remain functional
-
-### During Update Process
-1. **Monitoring**
-   - Monitor system performance during installation
-   - Watch for error messages or warnings
-   - Document any unexpected behavior
-
-2. **Communication**
-   - Notify relevant stakeholders of update schedule
-   - Coordinate with business users for testing
-   - Maintain communication with NetBox Labs support if needed
-
-### Post-Update Validation
-1. **Functional Testing**
-   - Test core synchronization processes
-   - Verify API connectivity remains stable
-   - Validate data integrity between systems
-
-2. **Performance Monitoring**
-   - Monitor system performance for any degradation
-   - Check integration hub flow execution
-   - Review system logs for new errors or warnings
-
-3. **User Acceptance**
-   - Coordinate with business users for validation
-   - Gather feedback on any functional changes
-   - Address any user-reported issues promptly
-
-## Troubleshooting Update Issues
-
-| Issue | Possible Cause | Resolution |
-|-------|---------------|------------|
-| Update Set Import Fails | File corruption or incompatible version | Re-download from NetBox Labs |
-| Preview Shows Conflicts | Local customizations conflict with updates | Review conflicts and resolve manually |
-| Commit Fails | Dependency issues or permission problems | Check dependencies and admin privileges |
-| Records Skipped | Data validation or conflict issues | Review skipped records per ServiceNow documentation |
-| Post-Update Errors | Configuration mismatches | Verify configuration and consult support |
-| Performance Degradation | Resource conflicts or inefficient changes | Monitor system resources and contact support |
-
diff --git a/docs/product_feature_lifecycle.md b/docs/product_feature_lifecycle.md
deleted file mode 100644
index 89d004d9..00000000
--- a/docs/product_feature_lifecycle.md
+++ /dev/null
@@ -1,33 +0,0 @@
-# NetBox Labs Product and Feature Lifecycle
-
-NetBox Labs products and features can go through multiple release stages before becoming generally available. These stages in the release life cycle can present varying degrees of stability and support. The following are the NetBox Labs release stages:
-
-- Experimental
-- Private Preview
-- Public Preview
-- General Availability (GA)
-
-## Quick Reference
-
-| | Experimental | Private Preview | Public Preview | General Availability (GA) |
-|----------|----------|----------|----------|----------|
-| **Audience** | Internal | Invited customers | Early adopters and users who request access | Available to all customers at the appropriate tier |
-| **Risk** | High (unknown) risk | Medium-high risk | Low-medium risk | Low (known) risk |
-| **Support**  | Not supported | Limited support through product and engineering | Support limited to enablement and configuration | Fully supported |
-| **Documentation**  | Code comments | Unofficial; communicated with participants | Limited; publicly available | Publicly available |
-
-## Full Definitions
-
-### Experimental
-This stage is for internal testing within the company. Products or features under this category are in their initial development phases, with high risks associated due to unknown variables. They are not supported and documentation is typically limited to code comments, aiming to gather preliminary insights and feedback internally.
-
-### Private Preview
-At this stage, products or features are shared with a select group of invited customers. This allows for more focused feedback and testing under real-world conditions, albeit with a medium-high risk. Support is limited and direct through product and engineering teams, with documentation being unofficial and primarily communicated directly with the participants.
-
-### Public Preview
-During the Public Preview, products or features are made available to early adopters and users who specifically request access. This phase aims to broaden the feedback loop and iron out any remaining issues, presenting a low to medium risk. Support is available but generally limited to enablement and configuration advice, with documentation becoming more accessible but still considered limited.
-
-### General Availability
-Once a product or feature reaches General Availability, it is available to all customers at the appropriate tier, marking its full release. The risk associated with using these products or features is low, as they are considered stable and reliable. Full support is provided at this stage, and documentation is comprehensive and publicly available.
-
-Please don’t hesitate to [contact us](mailto:info@netboxlabs.com) if you have any questions about this or you would like to discuss getting access to **Private Preview** or **Public Preview** products or features.  
\ No newline at end of file
diff --git a/docs/sdks/pynetbox.md b/docs/sdks/pynetbox.md
deleted file mode 100644
index 56cd82db..00000000
--- a/docs/sdks/pynetbox.md
+++ /dev/null
@@ -1,55 +0,0 @@
-# NetBox SDKs
-
-!!! info "Documentation Location"
-    **NetBox SDK documentation has moved!**
-    
-    For the most current and authoritative NetBox SDK documentation, please visit:
-    
-    **[NetBox SDKs Documentation →](https://netboxlabs.com/docs/netbox-sdks/)**
-
-## About NetBox SDKs
-
-NetBox SDKs provide programmatic access to NetBox through various programming languages. These libraries simplify integration with NetBox's REST API and enable automation of network infrastructure management tasks.
-
-### Available SDKs
-
-- **[pynetbox](https://netboxlabs.com/docs/netbox-sdks/pynetbox/)** - Python API client library
-- **[netbox-python](https://netboxlabs.com/docs/netbox-sdks/netbox-python/)** - Alternative lightweight Python wrapper
-- **[go-netbox](https://netboxlabs.com/docs/netbox-sdks/go-netbox/)** - Go client library
-- **[netbox-client-ruby](https://netboxlabs.com/docs/netbox-sdks/ruby/)** - Ruby client library
-
-### Key Features
-
-- **Full API Coverage**: Complete access to NetBox's REST API endpoints
-- **Authentication Support**: Token-based authentication for secure access
-- **Query Methods**: Comprehensive filtering, searching, and pagination support
-- **CRUD Operations**: Create, read, update, and delete NetBox objects
-- **Threading Support**: Multi-threaded operations for improved performance
-- **Type Safety**: Strongly typed interfaces where applicable
-
-### Getting Started
-
-To get started with NetBox SDKs, including installation instructions, authentication setup, and usage examples, please visit the official documentation:
-
-**[→ Visit NetBox SDKs Documentation](https://netboxlabs.com/docs/netbox-sdks/)**
-
-### Quick Links
-
-- **[Installation Guides](https://netboxlabs.com/docs/netbox-sdks/installation/)**
-- **[Authentication Setup](https://netboxlabs.com/docs/netbox-sdks/authentication/)**
-- **[Usage Examples](https://netboxlabs.com/docs/netbox-sdks/examples/)**
-- **[API Reference](https://netboxlabs.com/docs/netbox-sdks/api-reference/)**
-- **[Best Practices](https://netboxlabs.com/docs/netbox-sdks/best-practices/)**
-
-### Popular Use Cases
-
-- **Infrastructure Automation**: Automate device provisioning and configuration management
-- **Data Migration**: Bulk import/export of network infrastructure data
-- **Reporting & Analytics**: Generate custom reports and dashboards
-- **Integration**: Connect NetBox with other network management tools
-- **CI/CD Pipelines**: Integrate network documentation into deployment workflows
-
----
-
-!!! note "Why the redirect?"
-    NetBox SDK documentation is maintained in its own dedicated repository to ensure you always have access to the most up-to-date information, including the latest features, compatibility updates, and best practices for each supported programming language.
\ No newline at end of file
diff --git a/docs/stylesheets/custom.css b/docs/stylesheets/custom.css
deleted file mode 100644
index c41cc665..00000000
--- a/docs/stylesheets/custom.css
+++ /dev/null
@@ -1,117 +0,0 @@
-.pill {
-    display: inline-block;
-    padding: 0.0em 1.0em;
-    border-radius: 99px;
-    background-color: var(--pill-bg, #00f2d4);
-    color: white;
-    font-size: 0.8em;
-}
-.pill-enterprise {
-    background-color: #ffac00;
-}
-.pill-cloud {
-    background-color: #00d9be;
-}
-.pill-community {
-    background-color: #00bee0;
-}
-.pill-airgap {
-    background-color: #ff0078;
-}
-
-/* Default: Hide dark mode images */
-.nbl-light-img {
-    display: block;
-  }
-  
-  .nbl-dark-img {
-    display: none;
-  }
-  
-  /* Show the correct images based on the data-md-color-scheme attribute */
-  [data-md-color-scheme="nbl-light"] .nbl-light-img {
-    display: block;
-  }
-  
-  [data-md-color-scheme="nbl-light"] .nbl-dark-img {
-    display: none;
-  }
-  
-  [data-md-color-scheme="nbl-dark"] .nbl-light-img {
-    display: none;
-  }
-  
-  [data-md-color-scheme="nbl-dark"] .nbl-dark-img {
-    display: block;
-  }
-
-  /* Ensure light and dark images behave as intended */
-[data-md-color-scheme="nbl-light"] .nbl-light-img {
-    display: inline; /* Inline to align with text */
-  }
-  
-  [data-md-color-scheme="nbl-light"] .nbl-dark-img {
-    display: none;
-  }
-  
-  [data-md-color-scheme="nbl-dark"] .nbl-light-img {
-    display: none;
-  }
-  
-  [data-md-color-scheme="nbl-dark"] .nbl-dark-img {
-    display: inline; /* Inline to align with text */
-  }
-  /* Adjust spacing between the image and the text */
-  ul li img {
-    vertical-align: middle; /* Align images with text */
-    margin-right: 5px; /* Add space after the image */
-  }
-
-  /* Default style for light mode -THIS SECTION NOT WORKING PROPERLY- */
-hr {
-    border: 0;
-    height: 1px;
-    background: #00857d; /* Dark teal for light mode */
-}
-
-/* Style for dark mode */
-@media (prefers-color-scheme: dark) {
-    hr {
-        background: #00857d; /* Dark teal for dark mode */
-    }
-}
-/* -------------------------------
-   Search result readability - dark mode
----------------------------------- */
-
-/* Make all search result text white */
-[data-md-color-scheme="nbl-dark"] .md-search-result__title,
-[data-md-color-scheme="nbl-dark"] .md-search-result__teaser,
-[data-md-color-scheme="nbl-dark"] .md-search-result__meta,
-[data-md-color-scheme="nbl-dark"] .md-search-result__article,
-[data-md-color-scheme="nbl-dark"] a.md-search-result__link,
-[data-md-color-scheme="nbl-dark"] a.md-search-result__link *,
-[data-md-color-scheme="nbl-dark"] a.md-search-result__link article {
-  color: #ffffff !important;
-}
-
-/* Highlight matched terms with text color only (no background) */
-[data-md-color-scheme="nbl-dark"] .md-search-result__teaser mark,
-[data-md-color-scheme="nbl-dark"] .md-search-result__title mark,
-[data-md-color-scheme="nbl-dark"] .md-search-result__meta mark,
-[data-md-color-scheme="nbl-dark"] .md-search-result__article mark,
-[data-md-color-scheme="nbl-dark"] .md-search-result__link mark {
-  background-color: transparent !important;
-  color: #00f2d4 !important;  /* Bright teal */
-}
-
-/* White text in the search input box */
-[data-md-color-scheme="nbl-dark"] .md-search__input {
-  color: #ffffff !important;
-}
-
-/* Optional: hover/focus effect for result titles */
-[data-md-color-scheme="nbl-dark"] a.md-search-result__link:hover,
-[data-md-color-scheme="nbl-dark"] a.md-search-result__link:focus {
-  color: #66ccff !important;
-}
\ No newline at end of file
diff --git a/docs/stylesheets/extra.css b/docs/stylesheets/extra.css
deleted file mode 100644
index 2fa015db..00000000
--- a/docs/stylesheets/extra.css
+++ /dev/null
@@ -1,54 +0,0 @@
-[data-md-color-scheme="nbl-light"] {
-    color-scheme: light;
-
-    --md-default-fg-color--light: #001423b3;
-
-    --md-primary-fg-color:        #00857d;
-    --md-primary-fg-color--light: #00d9be;
-    --md-primary-fg-color--dark:  #00a595;
-    --md-primary-bg-color:        #fff;
-    --md-primary-bg-color--light: #ffffffb3;
-
-    --md-accent-fg-color:         #00d9be;
-    --md-accent-fg-color--transparent:  #00d9be1a;
-    --md-accent-bg-color:         #ffffff;
-    --md-accent-bg-color--light:  #ffffffb3;
-
-    --md-typeset-color:           #000000de;
-    --md-typeset-a-color:         #00a595;
-  }
-
-[data-md-color-scheme="nbl-dark"] {
-    color-scheme: dark;
-
-    --md-default-bg-color:        #001423;
-    --md-default-fg-color--light: #ffffff;
-
-    --md-primary-fg-color:        #00857d;
-    --md-primary-fg-color--light: #00d9be;
-    --md-primary-fg-color--dark:  #00a595;
-    --md-primary-bg-color:        #fff;
-    --md-primary-bg-color--light: #ffffffb3;
-
-    --md-accent-fg-color:         #00d9be;
-    --md-accent-fg-color--transparent:  #00d9be1a;
-    --md-accent-bg-color:         #ffffff;
-    --md-accent-bg-color--light:  #ffffffb3;   
-    
-    --md-typeset-color:           #ffffff;
-    --md-typeset-a-color:         #00ccb8;
-
-    --md-code-fg-color:           #ffffff;
-    --md-code-bg-color:           #272a35; 
-    --md-code-hl-name-color:      #ffffff;
-    --md-code-hl-string-color:    #ffffff;
-    --md-code-hl-punctuation-color:#ffffffb3;
-    --md-code-hl-operator-color:  #ffffffb3;
-    --md-code-hl-comment-color:   #ffffff;
-    --md-code-hl-generic-color:   #ffffff;
-    --md-code-hl-variable-color:  #ffffff;
-  
-
-    --md-admonition-fg-color:     #ffffff;
-    --md-admonition-bg-color:     #272a35;
-  }
\ No newline at end of file
diff --git a/docs/tags.yml b/docs/tags.yml
deleted file mode 100644
index 204dc936..00000000
--- a/docs/tags.yml
+++ /dev/null
@@ -1,389 +0,0 @@
-# Platform Tags (Display as Top Pills)
-cloud:
-  label: 'Cloud'
-  permalink: '/cloud'
-  description: 'Documentation specific to NetBox Cloud deployments and features'
-  type: 'platform'
-  color: '#00d9be'
-
-enterprise:
-  label: 'Enterprise'
-  permalink: '/enterprise'
-  description: 'Documentation specific to NetBox Enterprise deployments and features'
-  type: 'platform'
-  color: '#ffac00'
-
-community:
-  label: 'Community'
-  permalink: '/community'
-  description: 'Documentation applicable to NetBox Community edition'
-  type: 'platform'
-  color: '#00bee0'
-
-airgap:
-  label: 'Air-Gap'
-  permalink: '/airgap'
-  description: 'Documentation for air-gapped NetBox deployments'
-  type: 'platform'
-  color: '#ff0078'
-
-# Product Tags (Display as Regular Tags)
-netbox:
-  label: 'NetBox'
-  permalink: '/netbox'
-  description: 'Core NetBox features and functionality'
-  type: 'product'
-  color: '#6c757d'
-
-discovery:
-  label: 'Discovery'
-  permalink: '/discovery'
-  description: 'Network discovery and device detection features'
-  type: 'product'
-  color: '#28a745'
-
-assurance:
-  label: 'Assurance'
-  permalink: '/assurance'
-  description: 'Network monitoring and assurance capabilities'
-  type: 'product'
-  color: '#6f42c1'
-
-operator:
-  label: 'Operator'
-  permalink: '/operator'
-  description: 'AI-powered network operations and automation'
-  type: 'product'
-  color: '#fd7e14'
-
-# Deployment Tags (Display as Regular Tags)
-kubernetes:
-  label: 'Kubernetes'
-  permalink: '/kubernetes'
-  description: 'Kubernetes deployments, kubectl commands, and container orchestration'
-  type: 'deployment'
-
-helm:
-  label: 'Helm'
-  permalink: '/helm'
-  description: 'Helm chart deployments and Kubernetes package management'
-  type: 'deployment'
-
-# Technical Categories (Display as Regular Tags)
-api:
-  label: 'API'
-  permalink: '/api'
-  description: 'APIs, SDKs, integrations, and development tools'
-  type: 'category'
-
-authentication:
-  label: 'Authentication'
-  permalink: '/authentication'
-  description: 'Authentication, SSO, security, and access control'
-  type: 'category'
-
-administration:
-  label: 'Administration'
-  permalink: '/administration'
-  description: 'System administration, configuration, and management'
-  type: 'category'
-
-operations:
-  label: 'Operations'
-  permalink: '/operations'
-  description: 'Monitoring, backups, upgrades, and operational tasks'
-  type: 'category'
-
-# Content Types (Display as Regular Tags)
-installation:
-  label: 'Installation'
-  permalink: '/installation'
-  description: 'Installation guides and setup procedures'
-  type: 'content'
-
-configuration:
-  label: 'Configuration'
-  permalink: '/configuration'
-  description: 'Configuration guides, settings, and customization'
-  type: 'content'
-
-troubleshooting:
-  label: 'Troubleshooting'
-  permalink: '/troubleshooting'
-  description: 'Problem resolution, debugging, and support guides'
-  type: 'content'
-
-getting-started:
-  label: 'Getting Started'
-  permalink: '/getting-started'
-  description: 'Introductory guides and quick start documentation'
-  type: 'content'
-
-# Feature Categories (Display as Regular Tags)
-automation:
-  label: 'Automation'
-  permalink: '/automation'
-  description: 'Automation, workflows, and scripting'
-  type: 'feature'
-
-networking:
-  label: 'Networking'
-  permalink: '/networking'
-  description: 'Network connectivity, cloud connectivity, and infrastructure'
-  type: 'feature'
-
-integration:
-  label: 'Integration'
-  permalink: '/integration'
-  description: 'Third-party integrations, plugins, and extensions'
-  type: 'feature'
-
-ai:
-  label: 'AI'
-  permalink: '/ai'
-  description: 'Artificial Intelligence and machine learning features'
-  type: 'feature'
-
-# Service Tier Tags (Display as Service Tier Pills)
-free-tier:
-  label: 'Free'
-  permalink: '/free-tier'
-  description: 'Features available in the free tier'
-  type: 'tier'
-  color: '#28a745'
-
-starter-tier:
-  label: 'Starter'
-  permalink: '/starter-tier'
-  description: 'Features available in the starter tier'
-  type: 'tier'
-  color: '#17a2b8'
-
-professional-tier:
-  label: 'Professional'
-  permalink: '/professional-tier'
-  description: 'Features available in the professional tier'
-  type: 'tier'
-  color: '#ffc107'
-
-enterprise-tier:
-  label: 'Enterprise'
-  permalink: '/enterprise-tier'
-  description: 'Features available in the enterprise tier'
-  type: 'tier'
-  color: '#dc3545'
-
-# Legacy tier tags (kept for backward compatibility)
-free:
-  label: 'Free'
-  permalink: '/free'
-  description: 'Features available in the free tier'
-  type: 'tier'
-  color: '#28a745'
-
-starter:
-  label: 'Starter'
-  permalink: '/starter'
-  description: 'Features available in the starter tier'
-  type: 'tier'
-  color: '#17a2b8'
-
-pro:
-  label: 'Professional'
-  permalink: '/pro'
-  description: 'Features available in the professional tier'
-  type: 'tier'
-  color: '#ffc107'
-
-ent:
-  label: 'Enterprise'
-  permalink: '/ent'
-  description: 'Features available in the enterprise tier'
-  type: 'tier'
-  color: '#dc3545'
-
-# Cloud Provider Tags (Consolidated under networking/integration)
-aws:
-  label: 'AWS'
-  permalink: '/aws'
-  description: 'Amazon Web Services integrations and connectivity'
-  type: 'provider'
-
-azure:
-  label: 'Azure'
-  permalink: '/azure'
-  description: 'Microsoft Azure integrations and authentication'
-  type: 'provider'
-
-# Authentication & Security (Consolidated under authentication)
-sso:
-  label: 'SSO'
-  permalink: '/sso'
-  description: 'Single sign-on authentication and identity management'
-  type: 'security'
-
-saml:
-  label: 'SAML'
-  permalink: '/saml'
-  description: 'SAML authentication and identity federation'
-  type: 'security'
-
-okta:
-  label: 'Okta'
-  permalink: '/okta'
-  description: 'Okta identity provider integration'
-  type: 'security'
-
-rbac:
-  label: 'RBAC'
-  permalink: '/rbac'
-  description: 'Role-based access control and permissions'
-  type: 'security'
-
-security:
-  label: 'Security'
-  permalink: '/security'
-  description: 'Security features, access control, and data protection'
-  type: 'security'
-
-# Operations & Maintenance (Consolidated under operations)
-backup:
-  label: 'Backup'
-  permalink: '/backup'
-  description: 'Data backup, restore, and disaster recovery'
-  type: 'operational'
-
-database:
-  label: 'Database'
-  permalink: '/database'
-  description: 'Database management, backups, and administration'
-  type: 'operational'
-
-upgrade:
-  label: 'Upgrade'
-  permalink: '/upgrade'
-  description: 'System upgrades, migrations, and version management'
-  type: 'operational'
-
-migration:
-  label: 'Migration'
-  permalink: '/migration'
-  description: 'Data migration, system migration, and transition guides'
-  type: 'operational'
-
-maintenance:
-  label: 'Maintenance'
-  permalink: '/maintenance'
-  description: 'System maintenance, scheduled downtime, and updates'
-  type: 'operational'
-
-monitoring:
-  label: 'Monitoring'
-  permalink: '/monitoring'
-  description: 'System monitoring, alerting, and performance tracking'
-  type: 'operational'
-
-# Network Connectivity (Consolidated under networking)
-cloud-connectivity:
-  label: 'Cloud Connectivity'
-  permalink: '/cloud-connectivity'
-  description: 'Cloud network connectivity options and configurations'
-  type: 'network'
-
-vpn:
-  label: 'VPN'
-  permalink: '/vpn'
-  description: 'Virtual private network connections and tunnels'
-  type: 'network'
-
-ipsec:
-  label: 'IPSec'
-  permalink: '/ipsec'
-  description: 'IPSec VPN tunnels and security protocols'
-  type: 'network'
-
-direct-connect:
-  label: 'Direct Connect'
-  permalink: '/direct-connect'
-  description: 'AWS Direct Connect and dedicated network connections'
-  type: 'network'
-
-private-link:
-  label: 'Private Link'
-  permalink: '/private-link'
-  description: 'AWS Private Link and private connectivity'
-  type: 'network'
-
-internet-delivery:
-  label: 'Internet Delivery'
-  permalink: '/internet-delivery'
-  description: 'Internet-based connectivity and delivery methods'
-  type: 'network'
-
-multi-region:
-  label: 'Multi-Region'
-  permalink: '/multi-region'
-  description: 'Multi-region deployments and connectivity'
-  type: 'network'
-
-# Technical Features (Consolidated under integration/networking)
-plugins:
-  label: 'Plugins'
-  permalink: '/plugins'
-  description: 'NetBox plugins, extensions, and custom integrations'
-  type: 'technical'
-
-ui:
-  label: 'User Interface'
-  permalink: '/ui'
-  description: 'User interface features, navigation, and usability'
-  type: 'technical'
-
-interface:
-  label: 'Interface'
-  permalink: '/interface'
-  description: 'User interface design and interaction patterns'
-  type: 'technical'
-
-dns:
-  label: 'DNS'
-  permalink: '/dns'
-  description: 'Domain Name System configuration and management'
-  type: 'technical'
-
-ipam:
-  label: 'IPAM'
-  permalink: '/ipam'
-  description: 'IP Address Management features and functionality'
-  type: 'technical'
-
-high-availability:
-  label: 'High Availability'
-  permalink: '/high-availability'
-  description: 'High availability configurations and redundancy'
-  type: 'technical'
-
-# Content Organization
-faq:
-  label: 'FAQ'
-  permalink: '/faq'
-  description: 'Frequently asked questions and answers'
-  type: 'content-format'
-
-features:
-  label: 'Features'
-  permalink: '/features'
-  description: 'Product features and capabilities overview'
-  type: 'content-format'
-
-free-plan:
-  label: 'Free Plan'
-  permalink: '/free-plan'
-  description: 'Free plan features and limitations'
-  type: 'content-format'
-
-decision-guide:
-  label: 'Decision Guide'
-  permalink: '/decision-guide'
-  description: 'Decision-making guides and comparison resources'
-  type: 'content-format' 
\ No newline at end of file
diff --git a/docusaurus.config.ts b/docusaurus.config.ts
new file mode 100644
index 00000000..e169e1ae
--- /dev/null
+++ b/docusaurus.config.ts
@@ -0,0 +1,136 @@
+import { themes as prismThemes } from "prism-react-renderer";
+import type { Config } from "@docusaurus/types";
+import type * as Preset from "@docusaurus/preset-classic";
+
+const config: Config = {
+	title: "NetBox Documentation",
+	tagline: "Centralised Documentation for NetBox",
+	favicon: "img/favicon.ico",
+	url: "https://netboxlabs.com",
+	baseUrl: process.env.VERCEL_ENV === "production" ? "/docs/" : "/",
+	trailingSlash: true,
+	staticDirectories: ['static', 'docs/console/images', 'docs/netbox/media'],
+	organizationName: "netbox",
+	projectName: "netbox-docs",
+
+	markdown: {
+		mermaid: true,
+	},
+
+	plugins: [
+		async function myPlugin(context, options) {
+			return {
+				name: "docusaurus-tailwindcss",
+				configurePostCss(postcssOptions) {
+					// Appends TailwindCSS and AutoPrefixer.
+					postcssOptions.plugins.push(require("tailwindcss"));
+					postcssOptions.plugins.push(require("autoprefixer"));
+					return postcssOptions;
+				},
+			};
+		},
+		'docusaurus-plugin-sass',
+	],
+	themes: ['@docusaurus/theme-mermaid'],
+	presets: [
+		[
+			"classic",
+			{
+				docs: {
+					routeBasePath: process.env.VERCEL_ENV === "production" ? "/" : "/docs/",
+					sidebarPath: "./sidebars.ts",
+					// Ensure all MDX files are processed
+					include: ['**/*.md', '**/*.mdx'],
+					// Exclude internal documentation files and AI reference system
+					exclude: [
+						'**/AUTOMATED_DOCS_SYSTEM.md', 
+						'**/CHANGELOG_SYSTEM.md',
+						'**/ai-reference/**',
+						'../ai-reference/**'
+					],
+				},
+				blog: false,
+				theme: {
+					customCss: require.resolve("./src/css/globals.scss"),
+				},
+			} satisfies Preset.Options,
+		],
+	],
+	themeConfig: {
+		// Configure table of contents to show h2, h3, and h4 headings
+		tableOfContents: {
+			minHeadingLevel: 2,
+			maxHeadingLevel: 4,
+		},
+		image: "img/netbox-social-card.jpg",
+		algolia: {
+			appId: "XCF0TW7MCD",
+			apiKey: "a2b488046dfbbbf27aa204269640af66",
+			indexName: "netboxlabs",
+			contextualSearch: true, // Optional: Recommended for versioned/translated sites
+			// Optional: Specify domains where the navigation should occur through window.location instead on history.push. Useful when our Algolia config crawls multiple documentation sites and we want to navigate with window.location.href to them.
+			// externalUrlRegex: 'external\\.com|domain\\.com',
+			// Optional: Algolia search parameters
+			// searchParameters: {},
+			// Optional: path for search page that enabled by default (`false` to disable it)
+			// searchPagePath: 'search',
+			// insights: true, // Optional, automatically send insights if you have an Algolia account with this feature enabled
+		},
+		colorMode: {
+      defaultMode: "dark",
+      disableSwitch: true,
+      respectPrefersColorScheme: false,
+    },
+		navbar: {
+			title: "NetBox Documentation",
+			logo: {
+				alt: "NetBox Logo",
+				src: "img/logo.svg",
+				href: "/docs/netbox",
+			},
+			items: [
+				{
+					type: 'docSidebar',
+					sidebarId: 'defaultSidebar',
+					label: 'Docs Menu',
+					position: 'left',
+				},
+				{
+					href: "https://github.com/netbox-community/netbox/",
+					label: "GitHub",
+					position: "right",
+				},
+			],
+		},
+		footer: {
+			style: "dark",
+			links: [
+				{
+					title: "Community",
+					items: [
+						{
+							label: "X",
+							href: "https://x.com/NetBoxLabs",
+						},
+					],
+				},
+				{
+					title: "More",
+					items: [
+						{
+							label: "GitHub",
+							href: "https://github.com/netboxlabs",
+						},
+					],
+				},
+			],
+			copyright: `Copyright © ${new Date().getFullYear()} NetBox Labs.`,
+		},
+		prism: {
+			theme: prismThemes.github,
+			darkTheme: prismThemes.dracula,
+		},
+	} satisfies Preset.ThemeConfig,
+};
+
+export default config;
diff --git a/external-repos/console-docs b/external-repos/console-docs
new file mode 160000
index 00000000..870bb61d
--- /dev/null
+++ b/external-repos/console-docs
@@ -0,0 +1 @@
+Subproject commit 870bb61dbd21ec6215e94538c46148d5d9fad876
diff --git a/external-repos/netbox b/external-repos/netbox
new file mode 160000
index 00000000..f97d07a1
--- /dev/null
+++ b/external-repos/netbox
@@ -0,0 +1 @@
+Subproject commit f97d07a11cd3aaacb512c7f06b03489322a3bbc0
diff --git a/mkdocs.yml b/mkdocs.yml
deleted file mode 100644
index 2049fd42..00000000
--- a/mkdocs.yml
+++ /dev/null
@@ -1,232 +0,0 @@
-site_name: NetBox Labs Documentation
-theme:
-  name: material
-  custom_dir: overrides
-  favicon: images/netbox-favicon.png
-  logo: images/netbox-light-favicon.png
-  features:
-    - navigation.tracking
-    - navigation.instant
-    - navigation.tabs
-    - navigation.tabs.sticky
-    - navigation.top
-    - navigation.indexes
-    - navigation.sections
-    - navigation.prune
-    - search.suggest
-    # - toc.integrate
-    - content.code.copy
-    - content.code.select
-  palette:
-    - scheme: nbl-light
-      toggle:
-        icon: material/lightbulb 
-        name: Switch to dark mode
-    - scheme: nbl-dark
-      toggle:
-        icon: material/lightbulb-outline
-        name: Switch to light mode
-extra_css:
-  - stylesheets/extra.css
-  - stylesheets/custom.css
-markdown_extensions:
-  - abbr
-  - attr_list
-  - pymdownx.tabbed:
-      alternate_style: true
-  - pymdownx.snippets
-  - pymdownx.highlight
-  - pymdownx.inlinehilite
-  - pymdownx.caret
-  - pymdownx.mark
-  - pymdownx.tilde
-  - pymdownx.superfences
-  - admonition
-  - pymdownx.details
-  - attr_list
-  - md_in_html
-  - toc:
-      toc_depth: 3
-  - pymdownx.superfences:
-      custom_fences:
-        - name: mermaid
-          class: mermaid
-          format: pymdownx.superfences.fence_code_format
-plugins:
-  - search
-
-# Exclude internal development directories from documentation build
-exclude_docs: |
-  ai-reference/
-nav:
-  - Home: index.md
-  - Community:
-    - NetBox Plugins:
-      - Change Management:
-        - Overview: "netbox-extensions/changes/index.md"
-        - Configuration: "netbox-extensions/changes/configuration.md"
-        - Models:
-          - Change Request: "netbox-extensions/changes/models/changerequest.md"
-          - Comment: "netbox-extensions/changes/models/comment.md"
-          - Comment Reply: "netbox-extensions/changes/models/commentreply.md"
-          - Policy: "netbox-extensions/changes/models/policy.md"
-          - Policy Rule: "netbox-extensions/changes/models/policyrule.md"
-          - Review: "netbox-extensions/changes/models/review.md"
-        - Changelog: "netbox-extensions/changes/changelog.md"
-      - Diode:
-        - Introduction: "netbox-extensions/diode/index.md"
-        - Getting Started: "netbox-extensions/diode/getting-started.md"
-        - Protobuf Reference: "netbox-extensions/diode/protobuf/diode-proto.md"
-        - Observability: "netbox-extensions/diode/observability/metrics.md"
-    - NetBox Discovery:
-      - Overview: "netbox-discovery/index.md"
-      - Get Started: "netbox-discovery/getting-started.md"
-    - Integrations: 
-      - NetBox Ansible Collection: "netbox-integrations/netbox-ansible-collection.md"
-      - pyATS: "netbox-integrations/pyats.md"
-      - ServiceNow: 
-        - Overview: "netbox-integrations/servicenow/index.md"
-        - Installation: "netbox-integrations/servicenow/snow-installation.md"
-        - Technical Info: "netbox-integrations/servicenow/snow-technical-info.md"
-        - FAQ and Troubleshooting: "netbox-integrations/servicenow/snow-faq.md"
-        - Upgrading: "netbox-integrations/servicenow/snow-upgrading.md"
-    - SDKs:
-      - Pynetbox: "sdks/pynetbox.md"
-  - Cloud:
-    - Getting Started:
-      - Migrating to NetBox Cloud: "netbox-cloud/migrating-to-netbox-cloud.md"
-    - Administration:
-      - Getting Started:
-        - Getting Console Access: "administration-console/console-access.md"
-        - Console Overview: "administration-console/console-overview.md"
-        - Adding Admin Users: "administration-console/console-administration.md"
-      - Management:
-        - Database Backups: "administration-console/working_with_database_backups.md"
-        - Upgrading NetBox: "administration-console/upgrading-nbc.md"
-        - Managing Hostnames: "administration-console/managing-hostnames.md"
-        - Viewing Installed Plugins: "administration-console/netbox-cloud-plugins.md"
-      - Security:
-        - Prefix Lists: "administration-console/prefix-lists.md"
-        - Public IP Addressing: "administration-console/public-ip-addressing.md"
-        - Single Sign-On (SSO):
-          - Entra ID:
-            - Microsoft Entra ID SSO: "administration-console/azure-ad-sso-setup.md"
-            - Entra ID Group Mapping: "administration-console/azure-group-mapping.md"
-          - Okta:
-            - Okta SSO: "administration-console/okta-sso-setup.md"
-            - Okta Group Mapping: "administration-console/okta-group-mapping.md"
-          - SAML: 
-            - SAML SSO Setup: "administration-console/saml-sso-setup.md"
-            - SAML Group Mapping: "administration-console/saml-group-map.md"
-      - Free Plan:
-        - Features: "administration-console/free-plan-features.md"
-        - Add a New User: "administration-console/free-plan-new-user.md"
-      - Maintenance:
-        - Scheduled Maintenance: "maintenance.md"
-    - Cloud Connectivity:
-      - Overview:
-        - Do I Need Cloud Connectivity?: "cloud-connectivity/do-i-need-cloud-connectivity.md"
-        - Which Option is Right for Me?: "cloud-connectivity/which-connectivity-option.md"
-      - Connection Types:
-        - Internet Delivery (Single Region): "cloud-connectivity/internet-delivery.md"
-        - AWS Private Link (Single Region): "cloud-connectivity/aws-private-link.md"
-        - IPSEC VPN Tunnels (Single Region): "cloud-connectivity/ipsec-vpn-tunnels.md"
-        - AWS Direct Connect (Single Region): "cloud-connectivity/aws-direct-connect.md"
-        - AWS Direct Connect (Multi-Region): "cloud-connectivity/aws-direct-connect-multi-region.md"
-      - FAQ: "cloud-connectivity/cloud-connectivity-faq.md"
-    - NetBox Assurance:
-      - Overview: "netbox-assurance/index.md"
-      - Get Started: "netbox-assurance/getting-started.md"
-      - Using the Interface: "netbox-assurance/using-the-ui.md"
-    - NetBox Discovery:
-      - Overview: "netbox-discovery/index.md"
-      - Get Started: "netbox-discovery/getting-started.md"
-    - Integrations: 
-      - NetBox Ansible Collection: "netbox-integrations/netbox-ansible-collection.md"
-      - pyATS: "netbox-integrations/pyats.md"
-      - ServiceNow: 
-        - Overview: "netbox-integrations/servicenow/index.md"
-        - Installation: "netbox-integrations/servicenow/snow-installation.md"
-        - Technical Info: "netbox-integrations/servicenow/snow-technical-info.md"
-        - FAQ and Troubleshooting: "netbox-integrations/servicenow/snow-faq.md"
-        - Upgrading: "netbox-integrations/servicenow/snow-upgrading.md"
-  - Enterprise:
-    - Administration:
-      - Overview: "netbox-enterprise/nbe-overview.md"
-      - Installation:
-        - Requirements: "netbox-enterprise/nbe-ec-requirements.md"
-        - Distribution Specific Requirements:
-          - RHEL: "netbox-enterprise/nbe-ec-requirements-rhel.md"
-          - Ubuntu: "netbox-enterprise/nbe-ec-requirements-ubuntu.md"
-        - Linux System Changes: "netbox-enterprise/nbe-ec-linux-changes.md"
-        - Installation: "netbox-enterprise/nbe-ec-installation.md"
-        - Migrating: "netbox-enterprise/nbe-migrating.md"
-        - Built-in Plugin Installation: "netbox-enterprise/nbe-ec-built-in-plugins.md"
-        - Custom Plugin Installation: "netbox-enterprise/nbe-ec-custom-plugins.md"
-      - Management:
-        - TLS and Ingress: "netbox-enterprise/nbe-tls-ingress.md"
-        - Backups: "netbox-enterprise/nbe-backups.md"
-        - Advanced Tools and Troubleshooting: "netbox-enterprise/nbe-troubleshooting.md"
-      - Single Sign-On (SSO):
-        - Entra ID:
-          - Microsoft Entra ID SSO: "netbox-enterprise/nbe-azure-sso.md"
-          - Entra ID Group Mapping: "netbox-enterprise/nbe-azure-group-mapping.md"
-        - SAML: 
-          - SAML SSO Setup: "netbox-enterprise/nbe-saml.md"
-          - SAML Group Mapping: "netbox-enterprise/nbe-saml-group-map.md"
-        - LDAP: "netbox-enterprise/nbe-ldap.md"
-      - Release Notes: "netbox-enterprise/nbe-release-notes.md"
-    - NetBox Assurance:
-      - Overview: "netbox-assurance/index.md"
-      - Get Started: "netbox-assurance/getting-started.md"
-      - Using the Interface: "netbox-assurance/using-the-ui.md"
-    - NetBox Discovery:
-      - Overview: "netbox-discovery/index.md"
-      - Get Started: "netbox-discovery/getting-started.md"
-    - Integrations: 
-      - NetBox Ansible Collection: "netbox-integrations/netbox-ansible-collection.md"
-      - pyATS: "netbox-integrations/pyats.md"
-      - ServiceNow: 
-        - Overview: "netbox-integrations/servicenow/index.md"
-        - Installation: "netbox-integrations/servicenow/snow-installation.md"
-        - Technical Info: "netbox-integrations/servicenow/snow-technical-info.md"
-        - FAQ and Troubleshooting: "netbox-integrations/servicenow/snow-faq.md"
-        - Upgrading: "netbox-integrations/servicenow/snow-upgrading.md"
-  - Product and Feature Lifecycle: "product_feature_lifecycle.md"
-extra:
-  version:
-    provider: mike
-    default: v1.10
-    current: v1.10
-    available:
-      - v1.10 (Current)
-      - v1.9
-  
-  # Service tier tagging system for DocHub integration
-  tier_tags:
-    free:
-      label: "Free"
-      color: "#28a745"
-      description: "Features available in the free tier"
-    starter:
-      label: "Starter"
-      color: "#17a2b8"
-      description: "Features available in the starter tier"
-    pro:
-      label: "Professional"
-      color: "#ffc107"
-      description: "Features available in the professional tier"
-    ent:
-      label: "Enterprise"
-      color: "#dc3545"
-      description: "Features available in the enterprise tier"
-  
-  social:
-    - icon: fontawesome/solid/globe
-      link: https://netboxlabs.com
-    - icon: octicons/mail-24
-      link: "mailto:support@netboxlabs.com"
-  analytics:
-    provider: google
-    property: G-Q107GMDTJM
-copyright: Copyright &copy; 2025 NetBox Labs
diff --git a/overrides/optional_banner.html b/overrides/optional_banner.html
deleted file mode 100644
index f4004054..00000000
--- a/overrides/optional_banner.html
+++ /dev/null
@@ -1,9 +0,0 @@
-[//]: # (rename this file to `main.html` to have a banner announcement)
-
-{% extends "base.html" %}
-
-{% block announce %}
-  <center>
-  <p>Weekly maintenance windows - Tuesday and Thursday from 3:00-5:00am EDT / 12:00-2:00am PDT / 7:00-9:00am UTC</p>
-</center>
-{% endblock %}
\ No newline at end of file
diff --git a/package.json b/package.json
new file mode 100644
index 00000000..e14ff153
--- /dev/null
+++ b/package.json
@@ -0,0 +1,76 @@
+{
+	"name": "docs-project",
+	"version": "0.0.0",
+	"private": true,
+	"scripts": {
+		"transform-docs": "ts-node scripts/transformDocs.ts && python3 scripts/process_autodoc.py",
+		"fetch-options": "ts-node scripts/fetchOptions.ts",
+		"update-submodules": "git submodule update --init --recursive --remote external-repos/console-docs && git submodule update --init --recursive --remote external-repos/netbox",
+		"dev": "yarn update-submodules && yarn fetch-options && yarn transform-docs && docusaurus start --port 3001",
+		"docusaurus": "docusaurus",
+		"start": "docusaurus start",
+		"build": "yarn update-submodules && yarn fetch-options && yarn transform-docs && docusaurus build",
+		"swizzle": "docusaurus swizzle",
+		"deploy": "docusaurus deploy",
+		"clear": "docusaurus clear",
+		"serve": "docusaurus serve",
+		"write-translations": "docusaurus write-translations",
+		"write-heading-ids": "docusaurus write-heading-ids",
+		"typecheck": "tsc",
+		"postinstall": "git submodule update --init --recursive",
+		"process-autodoc": "python3 scripts/process_autodoc.py"
+	},
+	"dependencies": {
+		"@docusaurus/core": "^3.8.0",
+		"@docusaurus/plugin-content-docs": "^3.8.0",
+		"@docusaurus/preset-classic": "^3.8.0",
+		"@docusaurus/theme-mermaid": "^3.8.0",
+		"@mdx-js/react": "^3.0.0",
+		"@uidotdev/usehooks": "^2.4.1",
+		"clsx": "^2.0.0",
+		"docusaurus-plugin-remote-content": "^4.0.0",
+		"motion": "^12.10.0",
+		"prism-react-renderer": "^2.3.0",
+		"react": "^19.0.0",
+		"react-dom": "^19.0.0"
+	},
+	"devDependencies": {
+		"@algolia/client-search": "^4.9.1",
+		"@docusaurus/module-type-aliases": "^3.8.0",
+		"@docusaurus/tsconfig": "^3.8.0",
+		"@docusaurus/types": "^3.8.0",
+		"@types/js-yaml": "^4.0.9",
+		"@types/node": "^18.0.0",
+		"@types/react": "^18.0.0",
+		"@types/react-loadable": "^5.5.0",
+		"acorn": "^8.0.0",
+		"autoprefixer": "^10.4.21",
+		"docusaurus-plugin-sass": "^0.2.6",
+		"js-yaml": "^4.1.0",
+		"postcss": "^8.5.3",
+		"react-loadable": "^5.5.0",
+		"sass": "^1.87.0",
+		"search-insights": "^2.0.0",
+		"tailwindcss": "3",
+		"ts-node": "^10.9.2",
+		"typescript": "~5.6.2"
+	},
+	"browserslist": {
+		"production": [
+			">0.5%",
+			"not dead",
+			"not op_mini all"
+		],
+		"development": [
+			"last 3 chrome version",
+			"last 3 firefox version",
+			"last 5 safari version"
+		]
+	},
+	"engines": {
+		"node": "22.x"
+	},
+	"resolutions": {
+		"webpack-dev-server": ">=5.2.1"
+	}
+}
diff --git a/process_autodoc.py b/process_autodoc.py
new file mode 100644
index 00000000..0f9b7b2e
--- /dev/null
+++ b/process_autodoc.py
@@ -0,0 +1,27 @@
+# Map NetBox modules to their source file locations
+MODULE_FILE_MAP = {
+    'netbox.models.features': '../external-repos/netbox/netbox/netbox/models/features.py',
+    'netbox.views.generic': '../external-repos/netbox/netbox/netbox/views/generic',
+    'netbox.views.generic.base': '../external-repos/netbox/netbox/netbox/views/generic/base.py',
+    'netbox.tables': '../external-repos/netbox/netbox/utilities/tables.py',
+    'netbox.search': '../external-repos/netbox/netbox/netbox/search',
+    'netbox.jobs': '../external-repos/netbox/netbox/netbox/jobs.py',
+    'netbox.data_backends': '../external-repos/netbox/netbox/netbox/data_backends.py',
+    'netbox.events': '../external-repos/netbox/netbox/netbox/events.py',
+    'netbox.graphql.types': '../external-repos/netbox/netbox/netbox/graphql/types.py',
+    'utilities.views': '../external-repos/netbox/netbox/utilities/views.py',
+    'utilities.tables': '../external-repos/netbox/netbox/utilities/tables.py',
+} 
+
+import os
+
+# Fallback: try to construct path from module
+base_path = '../external-repos/netbox/netbox'
+module_parts = module_path.split('.')
+
+# Try different patterns
+patterns = [
+    os.path.join(base_path, *module_parts) + '.py',
+    os.path.join(base_path, *module_parts, '__init__.py'),
+    os.path.join(base_path, *module_parts[:-1], f'{module_parts[-1]}.py'),
+] 
\ No newline at end of file
diff --git a/requirements.txt b/requirements.txt
deleted file mode 100644
index a9850fb1..00000000
--- a/requirements.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-mkdocs-material
-mkdocs
-mike
\ No newline at end of file
diff --git a/scripts/debug_ast.py b/scripts/debug_ast.py
new file mode 100644
index 00000000..d86ea579
--- /dev/null
+++ b/scripts/debug_ast.py
@@ -0,0 +1,36 @@
+#!/usr/bin/env python3
+"""
+Debug AST parsing to see all methods in ObjectListView.
+"""
+
+import ast
+import os
+
+# Read the ObjectListView file
+file_path = "/Users/tom/git/netboxlabs-website-combined2/external-repos/netbox/netbox/netbox/views/generic/bulk_views.py"
+
+with open(file_path, 'r', encoding='utf-8') as f:
+    source = f.read()
+
+tree = ast.parse(source)
+
+for node in ast.walk(tree):
+    if isinstance(node, ast.ClassDef) and node.name == 'ObjectListView':
+        print(f"Found ObjectListView class")
+        print(f"Number of body items: {len(node.body)}")
+        
+        method_count = 0
+        for i, item in enumerate(node.body):
+            if isinstance(item, ast.FunctionDef):
+                method_count += 1
+                print(f"  Method {method_count}: {item.name} (line ~{item.lineno})")
+            elif isinstance(item, ast.Assign):
+                # Class attribute
+                for target in item.targets:
+                    if isinstance(target, ast.Name):
+                        print(f"  Attribute: {target.id}")
+            else:
+                print(f"  Other: {type(item).__name__}")
+        
+        print(f"\nTotal methods found: {method_count}")
+        break 
\ No newline at end of file
diff --git a/scripts/debug_autodoc.py b/scripts/debug_autodoc.py
new file mode 100644
index 00000000..5d740bf7
--- /dev/null
+++ b/scripts/debug_autodoc.py
@@ -0,0 +1,43 @@
+#!/usr/bin/env python3
+"""
+Debug script to test autodoc processing.
+"""
+
+import os
+from process_autodoc import find_source_file, extract_class_from_file
+
+# Test problematic view classes
+test_cases = [
+    ('netbox.views.generic', 'BulkImportView'),
+    ('netbox.views.generic', 'ObjectChangeLogView'),
+    ('netbox.views.generic', 'ObjectJournalView'),
+]
+
+for module_path, class_name in test_cases:
+    print(f"\nTesting {module_path}.{class_name}")
+    
+    # Test file resolution
+    source_file = find_source_file(module_path, class_name)
+    print(f"Source file: {source_file}")
+    
+    if source_file and os.path.exists(source_file):
+        print(f"File exists: ✓")
+        
+        # Test class extraction
+        class_info = extract_class_from_file(source_file, class_name)
+        if class_info:
+            print(f"Class found: ✓")
+            print(f"Description: {class_info['description'][:100]}...")
+            print(f"Methods found: {len(class_info['methods'])}")
+            print(f"Bases: {class_info['bases']}")
+            
+            print("\nAll methods:")
+            for i, method in enumerate(class_info['methods']):
+                print(f"  {i+1}. {method['name']}{method['signature']}")
+                if method['description']:
+                    print(f"     Desc: {method['description'][:50]}...")
+                print(f"     Params: {len(method['parameters'])}")
+        else:
+            print(f"Class NOT found in {source_file}")
+    else:
+        print(f"File NOT found or doesn't exist") 
\ No newline at end of file
diff --git a/scripts/extract_python_docs.py b/scripts/extract_python_docs.py
new file mode 100644
index 00000000..31996064
--- /dev/null
+++ b/scripts/extract_python_docs.py
@@ -0,0 +1,297 @@
+#!/usr/bin/env python3
+"""
+Extract real API documentation from NetBox Python source code.
+
+This script parses Python source files to extract actual docstrings, method signatures,
+and parameter information to generate comprehensive API documentation.
+"""
+
+import ast
+import os
+import re
+import sys
+from typing import Dict, List, Optional, Tuple, Any
+
+def parse_docstring(docstring: str) -> Dict[str, Any]:
+    """Parse a Google/NumPy style docstring to extract description and parameters."""
+    if not docstring:
+        return {'description': '', 'parameters': [], 'returns': ''}
+    
+    lines = docstring.strip().split('\n')
+    description_lines = []
+    parameters = []
+    returns = ''
+    
+    current_section = 'description'
+    
+    for line in lines:
+        line = line.strip()
+        
+        # Check for section headers
+        if line.lower() in ['args:', 'arguments:', 'parameters:', 'param:', 'params:']:
+            current_section = 'parameters'
+            continue
+        elif line.lower() in ['returns:', 'return:']:
+            current_section = 'returns'
+            continue
+        elif line.lower() in ['raises:', 'raise:']:
+            current_section = 'raises'
+            continue
+        
+        if current_section == 'description':
+            description_lines.append(line)
+        elif current_section == 'parameters':
+            # Look for parameter definitions like "exclude: An iterable of..."
+            param_match = re.match(r'^(\w+):\s*(.+)', line)
+            if param_match:
+                param_name, param_desc = param_match.groups()
+                parameters.append({
+                    'name': param_name,
+                    'description': param_desc,
+                    'type': 'Any',
+                    'default': None
+                })
+            elif parameters and line and not line.startswith(' '):
+                # Continuation of previous parameter description
+                parameters[-1]['description'] += ' ' + line
+        elif current_section == 'returns':
+            returns += line + ' '
+    
+    description = ' '.join(description_lines).strip()
+    # Clean up extra whitespace
+    description = re.sub(r'\s+', ' ', description)
+    
+    return {
+        'description': description,
+        'parameters': parameters,
+        'returns': returns.strip()
+    }
+
+def extract_method_from_ast(method_node: ast.FunctionDef) -> Dict[str, Any]:
+    """Extract method information from AST node."""
+    method_info = {
+        'name': method_node.name,
+        'signature': '',
+        'description': '',
+        'parameters': [],
+        'returns': ''
+    }
+    
+    # Get docstring
+    if (method_node.body and 
+        isinstance(method_node.body[0], ast.Expr) and 
+        isinstance(method_node.body[0].value, ast.Constant) and 
+        isinstance(method_node.body[0].value.value, str)):
+        
+        docstring = method_node.body[0].value.value
+        parsed_doc = parse_docstring(docstring)
+        method_info['description'] = parsed_doc['description']
+        method_info['returns'] = parsed_doc['returns']
+    
+    # Extract parameters
+    params = []
+    param_names = []
+    
+    for arg in method_node.args.args:
+        if arg.arg == 'self':
+            continue
+            
+        param_info = {
+            'name': arg.arg,
+            'type': 'Any',
+            'default': None,
+            'description': ''
+        }
+        
+        # Get type annotation
+        if arg.annotation:
+            try:
+                param_info['type'] = ast.unparse(arg.annotation)
+            except:
+                param_info['type'] = 'Any'
+        
+        params.append(param_info)
+        param_names.append(arg.arg)
+    
+    # Handle defaults
+    defaults = method_node.args.defaults
+    if defaults:
+        # Defaults are applied to the last len(defaults) parameters
+        num_defaults = len(defaults)
+        for i, default in enumerate(defaults):
+            param_index = len(params) - num_defaults + i
+            if param_index >= 0 and param_index < len(params):
+                try:
+                    params[param_index]['default'] = ast.unparse(default)
+                except:
+                    params[param_index]['default'] = 'None'
+    
+    # Merge with docstring parameters
+    if method_info['description']:
+        parsed_doc = parse_docstring(method_node.body[0].value.value if method_node.body and isinstance(method_node.body[0], ast.Expr) and isinstance(method_node.body[0].value, ast.Constant) else '')
+        for param in params:
+            doc_param = next((p for p in parsed_doc['parameters'] if p['name'] == param['name']), None)
+            if doc_param:
+                param['description'] = doc_param['description']
+    
+    method_info['parameters'] = params
+    
+    # Build signature
+    param_strs = []
+    for param in params:
+        param_str = param['name']
+        if param['default'] is not None:
+            param_str += f"={param['default']}"
+        param_strs.append(param_str)
+    
+    method_info['signature'] = f"({', '.join(param_strs)})"
+    
+    return method_info
+
+def extract_class_from_file(file_path: str, class_name: str) -> Dict[str, Any]:
+    """Extract class information from a Python source file using AST."""
+    try:
+        with open(file_path, 'r', encoding='utf-8') as f:
+            source = f.read()
+        
+        tree = ast.parse(source)
+        
+        for node in ast.walk(tree):
+            if isinstance(node, ast.ClassDef) and node.name == class_name:
+                class_info = {
+                    'class_name': class_name,
+                    'module_path': '',  # Will be set by caller
+                    'description': '',
+                    'methods': []
+                }
+                
+                # Get class docstring
+                if (node.body and 
+                    isinstance(node.body[0], ast.Expr) and 
+                    isinstance(node.body[0].value, ast.Constant) and 
+                    isinstance(node.body[0].value.value, str)):
+                    
+                    docstring = node.body[0].value.value
+                    parsed_doc = parse_docstring(docstring)
+                    class_info['description'] = parsed_doc['description']
+                
+                # Extract methods
+                for item in node.body:
+                    if isinstance(item, ast.FunctionDef):
+                        # Skip private methods except __str__ and __init__
+                        if item.name.startswith('_') and item.name not in ['__str__', '__init__']:
+                            continue
+                        
+                        method_info = extract_method_from_ast(item)
+                        class_info['methods'].append(method_info)
+                
+                return class_info
+        
+        return None
+        
+    except Exception as e:
+        print(f"Error parsing {file_path}: {e}")
+        return None
+
+def generate_method_documentation(method: Dict[str, Any]) -> str:
+    """Generate documentation for a single method."""
+    doc_parts = []
+    
+    # Method header
+    doc_parts.append(f"#### {method['name']}{method['signature']}")
+    doc_parts.append("")
+    
+    # Description
+    if method['description']:
+        doc_parts.append(method['description'])
+        doc_parts.append("")
+    
+    # Parameters table
+    if method['parameters']:
+        doc_parts.append("**Parameters:**")
+        doc_parts.append("")
+        doc_parts.append("| Name | Type | Default | Description |")
+        doc_parts.append("| --- | --- | --- | --- |")
+        
+        for param in method['parameters']:
+            name = param['name']
+            param_type = param['type']
+            default = param['default'] or '-'
+            description = param['description'] or 'No description available'
+            doc_parts.append(f"| {name} | {param_type} | {default} | {description} |")
+        
+        doc_parts.append("")
+    
+    # Returns
+    if method['returns']:
+        doc_parts.append(f"**Returns:** {method['returns']}")
+        doc_parts.append("")
+    
+    return '\n'.join(doc_parts)
+
+def generate_class_documentation(class_info: Dict[str, Any]) -> str:
+    """Generate comprehensive documentation for a class."""
+    if not class_info:
+        return ""
+    
+    doc_parts = []
+    
+    # Class header
+    doc_parts.append(f"## {class_info['class_name']}")
+    doc_parts.append("")
+    
+    # Module information
+    doc_parts.append(f"**Module:** `{class_info['module_path']}`")
+    doc_parts.append("")
+    
+    # Description
+    if class_info['description']:
+        doc_parts.append(class_info['description'])
+    else:
+        doc_parts.append(f"Provides functionality for NetBox plugin development.")
+    doc_parts.append("")
+    
+    # Methods
+    if class_info['methods']:
+        # Sort methods: public methods first, then special methods
+        public_methods = [m for m in class_info['methods'] if not m['name'].startswith('_')]
+        special_methods = [m for m in class_info['methods'] if m['name'].startswith('_')]
+        
+        all_methods = public_methods + special_methods
+        
+        if all_methods:
+            doc_parts.append("### Methods")
+            doc_parts.append("")
+            
+            for method in all_methods:
+                method_doc = generate_method_documentation(method)
+                doc_parts.append(method_doc)
+    
+    return '\n'.join(doc_parts)
+
+if __name__ == '__main__':
+    # Test with ChangeLoggingMixin
+    netbox_path = os.path.join(os.path.dirname(__file__), '..', 'external-repos', 'netbox', 'netbox')
+    features_file = os.path.join(netbox_path, 'netbox', 'models', 'features.py')
+    
+    print(f"Parsing file: {features_file}")
+    
+    # Test classes
+    test_classes = [
+        ('netbox.models.features', 'ChangeLoggingMixin'),
+        ('netbox.models.features', 'CloningMixin'),
+        ('netbox.models.features', 'CustomFieldsMixin'),
+    ]
+    
+    for module_path, class_name in test_classes:
+        print(f"\nExtracting documentation for {class_name}...")
+        class_info = extract_class_from_file(features_file, class_name)
+        if class_info:
+            class_info['module_path'] = module_path
+            doc = generate_class_documentation(class_info)
+            print(f"\n{'='*50}")
+            print(f"{class_name} Documentation")
+            print('='*50)
+            print(doc[:1000] + "..." if len(doc) > 1000 else doc)
+        else:
+            print(f"Could not extract info for {class_name}") 
\ No newline at end of file
diff --git a/scripts/fetchOptions.ts b/scripts/fetchOptions.ts
new file mode 100644
index 00000000..8b66fc67
--- /dev/null
+++ b/scripts/fetchOptions.ts
@@ -0,0 +1,156 @@
+const fs = require('fs/promises');
+const path = require('path');
+const { fileURLToPath } = require('url');
+
+
+const TARGET_URL = 'https://netboxlabscms.kinsta.cloud/wp-json/together/options';
+// Output directory relative to this script's parent directory, then into src/components/global
+const OUTPUT_DIR = path.resolve(__dirname, '../src/components/global');
+const OUTPUT_FILE = path.join(OUTPUT_DIR, 'options.data.ts');
+
+// Default fallback options if fetch fails
+const DEFAULT_OPTIONS = {
+  "header": {
+    "nav": {
+      "items": [
+        {
+          "link": {
+            "title": "Platform",
+            "url": "/#",
+            "target": ""
+          },
+          "has_submenu": false
+        },
+        {
+          "link": {
+            "title": "Solutions", 
+            "url": "/solutions/",
+            "target": ""
+          },
+          "has_submenu": false
+        },
+        {
+          "link": {
+            "title": "Resources",
+            "url": "/#",
+            "target": ""
+          },
+          "has_submenu": false
+        }
+      ]
+    }
+  }
+};
+
+async function fileExists(filePath) {
+  try {
+    await fs.access(filePath);
+    return true;
+  } catch {
+    return false;
+  }
+}
+
+async function fetchAndSaveOptions() {
+  try {
+    console.log(`Fetching options from ${TARGET_URL}...`);
+    
+    // Create abort controller for timeout
+    const controller = new AbortController();
+    const timeoutId = setTimeout(() => controller.abort(), 10000); // 10 second timeout
+    
+    const response = await fetch(TARGET_URL, {
+      signal: controller.signal,
+      headers: {
+        'Accept': 'application/json',
+        'User-Agent': 'NetBox Labs Documentation Builder'
+      }
+    });
+    
+    clearTimeout(timeoutId);
+    
+    if (!response.ok) {
+      throw new Error(`HTTP ${response.status} ${response.statusText}`);
+    }
+    
+    const contentType = response.headers.get('content-type');
+    const text = await response.text();
+    
+    // Handle WordPress responses that mix HTML notices with JSON
+    let jsonData;
+    if (contentType && contentType.includes('application/json')) {
+      // Try to find JSON in the response (may have HTML prefix from WordPress notices)
+      const jsonStart = text.indexOf('{');
+      if (jsonStart === -1) {
+        throw new Error(`No JSON found in response. Response: ${text.substring(0, 200)}...`);
+      }
+      
+      const jsonPortion = text.substring(jsonStart);
+      try {
+        jsonData = JSON.parse(jsonPortion);
+        if (jsonStart > 0) {
+          console.log('⚠️ Note: WordPress notices detected in CMS response, but JSON was extracted successfully.');
+        }
+      } catch (parseError) {
+        throw new Error(`Failed to parse JSON from response. Parse error: ${parseError.message}. JSON portion: ${jsonPortion.substring(0, 200)}...`);
+      }
+    } else {
+      throw new Error(`Expected JSON but received ${contentType || 'unknown content type'}. Response: ${text.substring(0, 200)}...`);
+    }
+    
+    const data = jsonData;
+    console.log('✅ Successfully fetched options data from CMS.');
+
+    // Ensure the target directory exists
+    await fs.mkdir(OUTPUT_DIR, { recursive: true });
+
+    const fileContent = `// This file is auto-generated by scripts/fetchOptions.ts
+// Do not edit this file manually.
+
+/* eslint-disable */
+// Disable ESLint for this auto-generated file to avoid issues with potentially complex data structures.
+
+export const options = ${JSON.stringify(data, null, 2)} as const;
+`;
+
+    await fs.writeFile(OUTPUT_FILE, fileContent, 'utf-8');
+    console.log(`Successfully saved options to ${OUTPUT_FILE}`);
+
+  } catch (error) {
+    console.warn('⚠️ Warning: CMS options fetch failed:', error.message);
+    
+    // Check if options file already exists
+    const optionsFileExists = await fileExists(OUTPUT_FILE);
+    
+    if (optionsFileExists) {
+      console.log('✅ Using existing options.data.ts file as fallback');
+      return; // Keep existing file, don't fail build
+    }
+    
+    // Create fallback file if none exists
+    console.log('📝 Creating fallback options.data.ts with default navigation structure');
+    
+    try {
+      await fs.mkdir(OUTPUT_DIR, { recursive: true });
+      
+      const fallbackContent = `// This file is auto-generated by scripts/fetchOptions.ts
+// Do not edit this file manually.
+// NOTE: Using fallback data due to CMS fetch failure
+
+/* eslint-disable */
+// Disable ESLint for this auto-generated file to avoid issues with potentially complex data structures.
+
+export const options = ${JSON.stringify(DEFAULT_OPTIONS, null, 2)} as const;
+`;
+
+      await fs.writeFile(OUTPUT_FILE, fallbackContent, 'utf-8');
+      console.log(`✅ Created fallback options file at ${OUTPUT_FILE}`);
+      
+    } catch (fallbackError) {
+      console.error('❌ Failed to create fallback options file:', fallbackError);
+      process.exit(1); // Only fail if we can't create any options file
+    }
+  }
+}
+
+fetchAndSaveOptions();
\ No newline at end of file
diff --git a/scripts/process_autodoc.py b/scripts/process_autodoc.py
new file mode 100644
index 00000000..40751704
--- /dev/null
+++ b/scripts/process_autodoc.py
@@ -0,0 +1,891 @@
+#!/usr/bin/env python3
+"""
+Process mkdocstrings autodoc directives in NetBox documentation.
+
+This script processes ::: module.path directives and replaces them with
+comprehensive documentation content extracted from the actual Python source code.
+"""
+
+import ast
+import os
+import re
+import glob
+from typing import Dict, List, Optional
+
+# Map NetBox modules to their source file locations
+SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
+BASE_DIR = os.path.dirname(SCRIPT_DIR)
+
+MODULE_FILE_MAP = {
+    'netbox.models.features': os.path.join(BASE_DIR, 'external-repos/netbox/netbox/netbox/models/features.py'),
+    'netbox.views.generic': os.path.join(BASE_DIR, 'external-repos/netbox/netbox/netbox/views/generic'),  # Directory
+    'netbox.views.generic.base': os.path.join(BASE_DIR, 'external-repos/netbox/netbox/netbox/views/generic/base.py'),
+    'netbox.tables': os.path.join(BASE_DIR, 'external-repos/netbox/netbox/netbox/tables/columns.py'),  # Table column classes
+    'netbox.search': os.path.join(BASE_DIR, 'external-repos/netbox/netbox/netbox/search'),
+    'netbox.jobs': os.path.join(BASE_DIR, 'external-repos/netbox/netbox/netbox/jobs.py'),
+    'netbox.data_backends': os.path.join(BASE_DIR, 'external-repos/netbox/netbox/netbox/data_backends.py'),
+    'netbox.events': os.path.join(BASE_DIR, 'external-repos/netbox/netbox/netbox/events.py'),
+    'netbox.graphql.types': os.path.join(BASE_DIR, 'external-repos/netbox/netbox/netbox/graphql/types.py'),
+    'utilities.views': os.path.join(BASE_DIR, 'external-repos/netbox/netbox/utilities/views.py'),
+    'utilities.tables': os.path.join(BASE_DIR, 'external-repos/netbox/netbox/utilities/tables.py'),
+    'utilities.templatetags.builtins.tags': os.path.join(BASE_DIR, 'external-repos/netbox/netbox/utilities/templatetags/builtins/tags.py'),
+    'utilities.templatetags.builtins': os.path.join(BASE_DIR, 'external-repos/netbox/netbox/utilities/templatetags/builtins'),
+    'extras.dashboard.widgets': os.path.join(BASE_DIR, 'external-repos/netbox/netbox/extras/dashboard/widgets.py'),
+}
+
+# Specific class to file mappings for netbox.views.generic
+VIEW_CLASS_FILES = {
+    'ObjectView': 'object_views.py',
+    'ObjectEditView': 'object_views.py',
+    'ObjectDeleteView': 'object_views.py',
+    'ObjectChildrenView': 'object_views.py',
+    'ObjectListView': 'bulk_views.py',
+    'BulkCreateView': 'bulk_views.py',
+    'BulkImportView': 'bulk_views.py',
+    'BulkEditView': 'bulk_views.py',
+    'BulkDeleteView': 'bulk_views.py',
+    'BaseObjectView': 'base.py',
+    'BaseMultiObjectView': 'base.py',
+    'ObjectChangeLogView': 'feature_views.py',
+    'ObjectJournalView': 'feature_views.py',
+}
+
+def escape_mdx_content(text: str) -> str:
+    """Escape content that might conflict with MDX parsing."""
+    if not text:
+        return text
+    
+    # Only replace the exact problematic strings that cause MDX compilation errors
+    
+    # Replace specific template filter examples that cause acorn parsing errors
+    text = text.replace('{{ data_dict|json }}', '`{{ data_dict|json }}`')
+    text = text.replace('{{ md_source_text|markdown }}', '`{{ md_source_text|markdown }}`')
+    
+    # Replace the specific Django URL pattern that causes JSX parsing issues
+    text = text.replace('<int:pk>', '&lt;int:pk&gt;')
+    
+    # Replace specific kwargs patterns that cause acorn parsing errors
+    text = text.replace("{'model': Site}", "\\{'model': Site\\}")
+    text = text.replace("kwargs={'model': Site}", "kwargs=\\{'model': Site\\}")
+    
+    # Fix the specific Site model reference that causes "Site is not defined" JavaScript error
+    text = text.replace("kwargs=\\{'model': Site\\}", "kwargs=\\{'model': 'Site'\\}")
+    
+    # Fix template string patterns that cause "app is not defined" JavaScript errors
+    text = text.replace('"{app}/{model}.html"', '"`{app}/{model}.html`"')
+    text = text.replace("'{app}/{model}.html'", "'{app}/{model}.html'")
+    
+    # Replace any other Django template syntax that might cause issues
+    # Look for {{ variable|filter }} patterns
+    text = re.sub(r'\{\{\s*[^}]+\|[^}]+\s*\}\}', lambda m: f'`{m.group(0)}`', text)
+    
+    return text
+
+def parse_docstring(docstring: str) -> Dict[str, str]:
+    """Parse a Google/NumPy style docstring to extract description and parameters."""
+    if not docstring:
+        return {'description': '', 'parameters': [], 'returns': '', 'attributes': []}
+    
+    lines = docstring.strip().split('\n')
+    description_lines = []
+    parameters = []
+    attributes = []
+    returns = ''
+    
+    current_section = 'description'
+    
+    for line in lines:
+        line = line.strip()
+        
+        # Check for section headers
+        if line.lower() in ['args:', 'arguments:', 'parameters:', 'param:', 'params:']:
+            current_section = 'parameters'
+            continue
+        elif line.lower() in ['attributes:', 'attribute:']:
+            current_section = 'attributes'
+            continue
+        elif line.lower() in ['returns:', 'return:']:
+            current_section = 'returns'
+            continue
+        elif line.lower() in ['raises:', 'raise:']:
+            current_section = 'raises'
+            continue
+        
+        if current_section == 'description':
+            description_lines.append(line)
+        elif current_section == 'parameters':
+            # Look for parameter definitions like "exclude: An iterable of..."
+            param_match = re.match(r'^(\w+):\s*(.+)', line)
+            if param_match:
+                param_name, param_desc = param_match.groups()
+                parameters.append({
+                    'name': param_name,
+                    'description': param_desc
+                })
+            elif parameters and line and not line.startswith(' '):
+                # Continuation of previous parameter description
+                parameters[-1]['description'] += ' ' + line
+        elif current_section == 'attributes':
+            # Look for attribute definitions like "tab: A ViewTab instance..."
+            attr_match = re.match(r'^(\w+):\s*(.+)', line)
+            if attr_match:
+                attr_name, attr_desc = attr_match.groups()
+                attributes.append({
+                    'name': attr_name,
+                    'description': attr_desc
+                })
+            elif attributes and line and not line.startswith(' '):
+                # Continuation of previous attribute description
+                attributes[-1]['description'] += ' ' + line
+        elif current_section == 'returns':
+            returns += line + ' '
+    
+    description = ' '.join(description_lines).strip()
+    # Clean up extra whitespace and code blocks
+    description = re.sub(r'\s+', ' ', description)
+    
+    return {
+        'description': description,
+        'parameters': parameters,
+        'returns': returns.strip(),
+        'attributes': attributes
+    }
+
+def extract_function_from_ast(func_node: ast.FunctionDef) -> Dict[str, str]:
+    """Extract function information from AST node."""
+    func_info = {
+        'name': func_node.name,
+        'signature': '',
+        'description': '',
+        'parameters': [],
+        'returns': ''
+    }
+    
+    # Get docstring
+    if (func_node.body and 
+        isinstance(func_node.body[0], ast.Expr) and 
+        isinstance(func_node.body[0].value, ast.Constant) and 
+        isinstance(func_node.body[0].value.value, str)):
+        
+        docstring = func_node.body[0].value.value
+        parsed_doc = parse_docstring(docstring)
+        func_info['description'] = parsed_doc['description']
+        func_info['returns'] = parsed_doc['returns']
+        
+        # Create parameter lookup for docstring descriptions
+        doc_params_lookup = {p['name']: p['description'] for p in parsed_doc['parameters']}
+    else:
+        doc_params_lookup = {}
+    
+    # Extract parameters from function signature
+    params = []
+    
+    for arg in func_node.args.args:
+        param_info = {
+            'name': arg.arg,
+            'type': 'Any',
+            'default': None,
+            'description': doc_params_lookup.get(arg.arg, 'No description available')
+        }
+        
+        # Get type annotation
+        if arg.annotation:
+            try:
+                param_info['type'] = ast.unparse(arg.annotation)
+            except:
+                param_info['type'] = 'Any'
+        
+        params.append(param_info)
+    
+    # Handle defaults
+    defaults = func_node.args.defaults
+    if defaults:
+        # Defaults are applied to the last len(defaults) parameters
+        num_defaults = len(defaults)
+        for i, default in enumerate(defaults):
+            param_index = len(params) - num_defaults + i
+            if param_index >= 0 and param_index < len(params):
+                try:
+                    params[param_index]['default'] = ast.unparse(default)
+                except:
+                    params[param_index]['default'] = 'None'
+    
+    func_info['parameters'] = params
+    
+    # Build signature
+    param_strs = []
+    for param in params:
+        param_str = param['name']
+        if param['default'] is not None:
+            param_str += f"={param['default']}"
+        param_strs.append(param_str)
+    
+    func_info['signature'] = f"({', '.join(param_strs)})"
+    
+    return func_info
+
+def extract_method_from_ast(method_node: ast.FunctionDef) -> Dict[str, str]:
+    """Extract method information from AST node."""
+    method_info = {
+        'name': method_node.name,
+        'signature': '',
+        'description': '',
+        'parameters': [],
+        'returns': ''
+    }
+    
+    # Get docstring
+    if (method_node.body and 
+        isinstance(method_node.body[0], ast.Expr) and 
+        isinstance(method_node.body[0].value, ast.Constant) and 
+        isinstance(method_node.body[0].value.value, str)):
+        
+        docstring = method_node.body[0].value.value
+        parsed_doc = parse_docstring(docstring)
+        method_info['description'] = parsed_doc['description']
+        method_info['returns'] = parsed_doc['returns']
+        
+        # Create parameter lookup for docstring descriptions
+        doc_params_lookup = {p['name']: p['description'] for p in parsed_doc['parameters']}
+    else:
+        doc_params_lookup = {}
+    
+    # Extract parameters from method signature
+    params = []
+    
+    for arg in method_node.args.args:
+        if arg.arg == 'self':
+            continue
+            
+        param_info = {
+            'name': arg.arg,
+            'type': 'Any',
+            'default': None,
+            'description': doc_params_lookup.get(arg.arg, 'No description available')
+        }
+        
+        # Get type annotation
+        if arg.annotation:
+            try:
+                param_info['type'] = ast.unparse(arg.annotation)
+            except:
+                param_info['type'] = 'Any'
+        
+        params.append(param_info)
+    
+    # Handle defaults
+    defaults = method_node.args.defaults
+    if defaults:
+        # Defaults are applied to the last len(defaults) parameters
+        num_defaults = len(defaults)
+        for i, default in enumerate(defaults):
+            param_index = len(params) - num_defaults + i
+            if param_index >= 0 and param_index < len(params):
+                try:
+                    params[param_index]['default'] = ast.unparse(default)
+                except:
+                    params[param_index]['default'] = 'None'
+    
+    method_info['parameters'] = params
+    
+    # Build signature
+    param_strs = []
+    for param in params:
+        param_str = param['name']
+        if param['default'] is not None:
+            param_str += f"={param['default']}"
+        param_strs.append(param_str)
+    
+    # Add *args if present
+    if method_node.args.vararg:
+        param_strs.append(f"*{method_node.args.vararg.arg}")
+    
+    # Add **kwargs if present
+    if method_node.args.kwarg:
+        param_strs.append(f"**{method_node.args.kwarg.arg}")
+    
+    method_info['signature'] = f"({', '.join(param_strs)})"
+    
+    return method_info
+
+def extract_function_from_file(file_path: str, function_name: str) -> Optional[Dict[str, str]]:
+    """Extract function information from a Python source file using AST."""
+    try:
+        with open(file_path, 'r', encoding='utf-8') as f:
+            source = f.read()
+        
+        tree = ast.parse(source)
+        
+        for node in ast.walk(tree):
+            if isinstance(node, ast.FunctionDef) and node.name == function_name:
+                func_info = extract_function_from_ast(node)
+                return func_info
+        
+        return None
+        
+    except Exception as e:
+        print(f"Error parsing {file_path}: {e}")
+        return None
+
+def extract_class_from_file(file_path: str, class_name: str) -> Optional[Dict[str, str]]:
+    """Extract class information from a Python source file using AST."""
+    try:
+        with open(file_path, 'r', encoding='utf-8') as f:
+            source = f.read()
+        
+        tree = ast.parse(source)
+        
+        for node in ast.walk(tree):
+            if isinstance(node, ast.ClassDef) and node.name == class_name:
+                class_info = {
+                    'class_name': class_name,
+                    'description': '',
+                    'methods': [],
+                    'bases': [],
+                    'attributes': [],
+                    'nested_classes': []
+                }
+                
+                # Get class docstring
+                if (node.body and 
+                    isinstance(node.body[0], ast.Expr) and 
+                    isinstance(node.body[0].value, ast.Constant) and 
+                    isinstance(node.body[0].value.value, str)):
+                    
+                    docstring = node.body[0].value.value
+                    parsed_doc = parse_docstring(docstring)
+                    class_info['description'] = parsed_doc['description']
+                    class_info['attributes'] = parsed_doc['attributes']
+                
+                # Extract base classes
+                for base in node.bases:
+                    try:
+                        if isinstance(base, ast.Name):
+                            class_info['bases'].append(base.id)
+                        elif isinstance(base, ast.Attribute):
+                            # Handle module.ClassName format
+                            base_name = ast.unparse(base)
+                            # Simplify common Django base classes
+                            if base_name == 'models.Model':
+                                class_info['bases'].append('Model')
+                            else:
+                                class_info['bases'].append(base_name.split('.')[-1])
+                        else:
+                            # Fallback for complex base expressions
+                            base_name = ast.unparse(base)
+                            class_info['bases'].append(base_name.split('.')[-1])
+                    except:
+                        continue
+                
+                # Extract methods and nested classes
+                for item in node.body:
+                    if isinstance(item, ast.FunctionDef):
+                        # Skip private methods except special ones
+                        if item.name.startswith('_') and item.name not in ['__str__', '__init__']:
+                            continue
+                        
+                        # Skip certain internal/permission methods that shouldn't be documented
+                        if item.name in ['get_required_permission', 'dispatch']:
+                            continue
+                        
+                        method_info = extract_method_from_ast(item)
+                        # Include all public methods, not just those with descriptions
+                        class_info['methods'].append(method_info)
+                    elif isinstance(item, ast.ClassDef):
+                        # Skip Django Model Meta classes - they are internal configuration
+                        if item.name == 'Meta':
+                            continue
+                            
+                        # Extract nested classes
+                        nested_class_info = {
+                            'name': item.name,
+                            'description': '',
+                            'bases': [],
+                            'methods': []
+                        }
+                        
+                        # Get nested class docstring
+                        if (item.body and 
+                            isinstance(item.body[0], ast.Expr) and 
+                            isinstance(item.body[0].value, ast.Constant) and 
+                            isinstance(item.body[0].value.value, str)):
+                            
+                            nested_class_info['description'] = item.body[0].value.value.strip()
+                        
+                        # Get nested class bases
+                        for base in item.bases:
+                            try:
+                                if isinstance(base, ast.Name):
+                                    nested_class_info['bases'].append(base.id)
+                                else:
+                                    base_name = ast.unparse(base)
+                                    nested_class_info['bases'].append(base_name.split('.')[-1])
+                            except:
+                                continue
+                        
+                        # Extract methods from nested class
+                        for nested_item in item.body:
+                            if isinstance(nested_item, ast.FunctionDef):
+                                if not nested_item.name.startswith('_') or nested_item.name in ['__str__', '__init__']:
+                                    method_info = extract_method_from_ast(nested_item)
+                                    nested_class_info['methods'].append(method_info)
+                        
+                        class_info['nested_classes'].append(nested_class_info)
+                
+                return class_info
+        
+        return None
+        
+    except Exception as e:
+        print(f"Error parsing {file_path}: {e}")
+        return None
+
+def find_source_file(module_path: str, class_name: str) -> Optional[str]:
+    """Find the source file for a given module and class."""
+    # Special handling for netbox.views.generic classes
+    if module_path == 'netbox.views.generic' and class_name in VIEW_CLASS_FILES:
+        views_dir = MODULE_FILE_MAP[module_path]
+        specific_file = os.path.join(views_dir, VIEW_CLASS_FILES[class_name])
+        if os.path.isfile(specific_file):
+            return specific_file
+    
+    # Try exact module mapping first
+    if module_path in MODULE_FILE_MAP:
+        source_file = MODULE_FILE_MAP[module_path]
+        if os.path.isfile(source_file):
+            return source_file
+        elif os.path.isdir(source_file):
+            # Try common Python file patterns in directory
+            for pattern in ['__init__.py', f'{class_name.lower()}.py', 'base.py']:
+                file_path = os.path.join(source_file, pattern)
+                if os.path.isfile(file_path):
+                    return file_path
+    
+    # Fallback: try to construct path from module
+    base_path = os.path.join(BASE_DIR, 'external-repos/netbox/netbox')
+    module_parts = module_path.split('.')
+    
+    # Try different patterns
+    patterns = [
+        os.path.join(base_path, *module_parts) + '.py',
+        os.path.join(base_path, *module_parts, '__init__.py'),
+        os.path.join(base_path, *module_parts[:-1], f'{module_parts[-1]}.py'),
+    ]
+    
+    for pattern in patterns:
+        if os.path.isfile(pattern):
+            return pattern
+    
+    return None
+
+def generate_function_documentation(func_info: Dict[str, str], indent: str = "") -> str:
+    """Generate documentation for a function."""
+    doc_parts = []
+    
+    # Function header - use ### for better nesting under main sections
+    doc_parts.append(f"{indent}### {func_info['name']}")
+    doc_parts.append("")
+    
+    # Function signature in code block
+    doc_parts.append(f"{indent}```")
+    doc_parts.append(f"{indent}{func_info['name']}{func_info['signature']}")
+    doc_parts.append(f"{indent}```")
+    doc_parts.append("")
+    
+    # Description
+    if func_info['description']:
+        doc_parts.append(f"{indent}{escape_mdx_content(func_info['description'])}")
+        doc_parts.append("")
+    
+    # Parameters - only show table if there are meaningful parameter descriptions
+    if func_info['parameters']:
+        # Check if we have any meaningful parameter descriptions
+        meaningful_params = []
+        for param in func_info['parameters']:
+            if (param['description'] and 
+                param['description'] != 'No description available' and 
+                param['description'].strip()):
+                meaningful_params.append(param)
+        
+        # Only show parameters table if we have meaningful descriptions
+        if meaningful_params:
+            doc_parts.append(f"{indent}**Parameters:**")
+            doc_parts.append("")
+            doc_parts.append(f"{indent}| Name | Type | Description | Default |")
+            doc_parts.append(f"{indent}| --- | --- | --- | --- |")
+            
+            for param in meaningful_params:
+                name = param['name']
+                param_type = param['type'] if param['type'] != 'Any' else ''
+                description = escape_mdx_content(param['description'])
+                
+                # Handle default values
+                if param['default'] and param['default'] not in ['-', 'None']:
+                    default = param['default']
+                else:
+                    default = 'required'
+                
+                doc_parts.append(f"{indent}| {name} | {param_type} | {description} | {default} |")
+            
+            doc_parts.append("")
+    
+    # Returns
+    if func_info['returns']:
+        doc_parts.append(f"{indent}**Returns:** {escape_mdx_content(func_info['returns'])}")
+        doc_parts.append("")
+    
+    return '\n'.join(doc_parts)
+
+def extract_module_info(autodoc_line: str) -> Optional[Dict[str, str]]:
+    """Extract module path and class/function name from autodoc directive."""
+    match = re.match(r'^(\s*)::: (.+)$', autodoc_line.strip())
+    if not match:
+        return None
+    
+    indent = match.group(1)
+    full_path = match.group(2)
+    
+    # Extract function/class name (last part) and module path (everything before)
+    parts = full_path.split('.')
+    item_name = parts[-1]
+    module_path = '.'.join(parts[:-1])  # Join all parts except the last one
+    
+    # Determine if this is likely a function or class based on module path
+    item_type = 'class'  # default
+    if 'templatetags' in module_path:
+        item_type = 'function'
+    
+    return {
+        'indent': indent,
+        'module_path': module_path,
+        'item_name': item_name,
+        'class_name': item_name,  # Keep for backward compatibility
+        'full_path': full_path,
+        'item_type': item_type
+    }
+
+def generate_method_documentation(method: Dict[str, str], indent: str = "") -> str:
+    """Generate documentation for a single method."""
+    doc_parts = []
+    
+    # Method header - escape double underscores for __init__ and other special methods
+    method_name = method['name']
+    if method_name.startswith('__') and method_name.endswith('__'):
+        # Escape double underscores to prevent markdown emphasis
+        escaped_name = method_name.replace('__', '\\_\\_')
+        doc_parts.append(f"{indent}#### {escaped_name}{method['signature']}")
+    else:
+        doc_parts.append(f"{indent}#### {method_name}{method['signature']}")
+    doc_parts.append("")
+    
+    # Description
+    if method['description']:
+        # Split long descriptions into paragraphs
+        desc_lines = method['description'].split('. ')
+        for line in desc_lines:
+            if line.strip():
+                escaped_line = escape_mdx_content(line.strip())
+                doc_parts.append(f"{indent}{escaped_line}{'.' if not escaped_line.endswith('.') else ''}")
+        doc_parts.append("")
+    
+    # Parameters table
+    if method['parameters']:
+        doc_parts.append(f"{indent}**Parameters:**")
+        doc_parts.append("")
+        doc_parts.append(f"{indent}| Name | Type | Description | Default |")
+        doc_parts.append(f"{indent}| --- | --- | --- | --- |")
+        
+        for param in method['parameters']:
+            name = param['name']
+            param_type = param['type']
+            default = param['default'] or '-'
+            description = param['description'] or 'No description available'
+            doc_parts.append(f"{indent}| {name} | {param_type} | {description} | {default} |")
+        
+        doc_parts.append("")
+    
+    # Returns
+    if method['returns']:
+        doc_parts.append(f"{indent}**Returns:** {method['returns']}")
+        doc_parts.append("")
+    
+    return '\n'.join(doc_parts)
+
+def generate_documentation(module_info: Dict[str, str]) -> str:
+    """Generate comprehensive documentation for a class or function."""
+    item_name = module_info['item_name']
+    module_path = module_info['module_path']
+    indent = module_info['indent']
+    item_type = module_info.get('item_type', 'class')
+    
+    # Find and parse source file
+    source_file = find_source_file(module_path, item_name)
+    if not source_file:
+        # Fallback to generic documentation
+        return generate_fallback_documentation(module_info)
+    
+    if item_type == 'function':
+        # Extract function information
+        func_info = extract_function_from_file(source_file, item_name)
+        if not func_info:
+            return generate_fallback_documentation(module_info)
+        return generate_function_documentation(func_info, indent)
+    else:
+        # Extract class information (existing logic)
+        class_info = extract_class_from_file(source_file, item_name)
+        if not class_info:
+            return generate_fallback_documentation(module_info)
+        
+        # Generate documentation sections
+        doc_parts = []
+        
+        # Class header - use ### to nest under main sections like "Columns"
+        doc_parts.append(f"{indent}### {item_name}")
+        doc_parts.append("")
+        
+        # Bases (if available)
+        if class_info['bases']:
+            doc_parts.append(f"{indent}**Bases:** {', '.join(class_info['bases'])}")
+            doc_parts.append("")
+        
+        # Description
+        if class_info['description']:
+            doc_parts.append(f"{indent}{escape_mdx_content(class_info['description'])}")
+        else:
+            doc_parts.append(f"{indent}Provides functionality for NetBox plugin development.")
+        doc_parts.append("")
+        
+        # Attributes (if available)
+        if class_info['attributes']:
+            doc_parts.append(f"{indent}**Attributes:**")
+            doc_parts.append("")
+            doc_parts.append(f"{indent}| Name | Type | Description |")
+            doc_parts.append(f"{indent}| --- | --- | --- |")
+            
+            for attr in class_info['attributes']:
+                name = attr['name']
+                # Try to infer type from description or use generic
+                attr_type = 'Any'  # Could be enhanced to parse type from description
+                description = escape_mdx_content(attr['description'])
+                doc_parts.append(f"{indent}| {name} | {attr_type} | {description} |")
+            
+            doc_parts.append("")
+        
+        # Add nested classes documentation BEFORE methods
+        if class_info.get('nested_classes'):
+            for nested_class in class_info['nested_classes']:
+                # Use #### (H4) for nested classes to nest them under the main ### (H3) class
+                doc_parts.append(f"{indent}#### {nested_class['name']}")
+                doc_parts.append("")
+                
+                # Bases for nested class
+                if nested_class['bases']:
+                    doc_parts.append(f"{indent}**Bases:** {', '.join(nested_class['bases'])}")
+                    doc_parts.append("")
+                
+                # Description for nested class
+                if nested_class['description']:
+                    doc_parts.append(f"{indent}{escape_mdx_content(nested_class['description'])}")
+                else:
+                    doc_parts.append(f"{indent}The {nested_class['name'].lower()} class.")
+                doc_parts.append("")
+                
+                # Methods for nested class - use ##### (H5) to nest under #### nested class
+                for method in nested_class.get('methods', []):
+                    if method['description'] or method['parameters']:
+                        # Generate method documentation with increased indent for nested class methods
+                        nested_method_doc = generate_method_documentation(method, indent)
+                        # Change #### to ##### for nested class methods
+                        nested_method_doc = nested_method_doc.replace(f"{indent}#### ", f"{indent}##### ")
+                        doc_parts.append(nested_method_doc)
+        
+        # Methods (directly without "Methods" header)
+        if class_info['methods']:
+            # For model feature mixins, include all meaningful public methods
+            # For table columns, only include __init__ method if it has meaningful parameters
+            
+            methods_to_show = []
+            
+            # Check if this is a table column class (from netbox.tables module)
+            is_table_column = module_path == 'netbox.tables'
+            
+            if is_table_column:
+                # For table columns, only include __init__ method if it has meaningful parameters
+                init_method = None
+                for method in class_info['methods']:
+                    if method['name'] == '__init__':
+                        # Check if __init__ has meaningful parameters (beyond self)
+                        meaningful_params = []
+                        for param in method['parameters']:
+                            if (param['description'] and 
+                                param['description'] != 'No description available' and 
+                                param['description'].strip()):
+                                meaningful_params.append(param)
+                        
+                        # Only include __init__ if it has meaningful parameters
+                        if meaningful_params:
+                            init_method = method
+                        break
+                
+                if init_method:
+                    methods_to_show.append(('init', init_method))
+            else:
+                # For model feature mixins and other classes, include all meaningful public methods
+                for method in class_info['methods']:
+                    # Skip private methods except special ones
+                    if method['name'].startswith('_') and method['name'] not in ['__str__', '__init__']:
+                        continue
+                    
+                    # Skip certain internal/permission methods that shouldn't be documented
+                    if method['name'] in ['get_required_permission', 'dispatch', 'clean', 'save', 'delete']:
+                        continue
+                    
+                    # Include methods with descriptions or meaningful parameters
+                    if (method['description'] and 
+                        method['description'].strip() and 
+                        method['description'] != 'No description available'):
+                        methods_to_show.append(('method', method))
+                    elif method['parameters']:
+                        # Include methods with meaningful parameters even if no description
+                        meaningful_params = [p for p in method['parameters'] 
+                                           if p['description'] and p['description'] != 'No description available']
+                        if meaningful_params:
+                            methods_to_show.append(('method', method))
+            
+            # Generate documentation for selected methods
+            for method_type, method in methods_to_show:
+                if method_type == 'init':
+                    # Escape the double underscores to prevent markdown emphasis
+                    doc_parts.append(f"{indent}#### \\_\\_init\\_\\_{method['signature']}")
+                    doc_parts.append("")
+                    
+                    # Parameters table for __init__
+                    if method['parameters']:
+                        meaningful_params = []
+                        for param in method['parameters']:
+                            if (param['description'] and 
+                                param['description'] != 'No description available' and 
+                                param['description'].strip()):
+                                meaningful_params.append(param)
+                        
+                        if meaningful_params:
+                            doc_parts.append(f"{indent}**Parameters:**")
+                            doc_parts.append("")
+                            doc_parts.append(f"{indent}| Name | Type | Description | Default |")
+                            doc_parts.append(f"{indent}| --- | --- | --- | --- |")
+                            
+                            for param in meaningful_params:
+                                name = param['name']
+                                param_type = param['type'] if param['type'] != 'Any' else ''
+                                description = escape_mdx_content(param['description'])
+                                
+                                # Handle default values
+                                if param['default'] and param['default'] not in ['-', 'None']:
+                                    default = param['default']
+                                else:
+                                    default = 'required'
+                                
+                                doc_parts.append(f"{indent}| {name} | {param_type} | {description} | {default} |")
+                            
+                            doc_parts.append("")
+                else:
+                    # Regular method documentation
+                    method_doc = generate_method_documentation(method, indent)
+                    doc_parts.append(method_doc)
+        
+        return '\n'.join(doc_parts)
+
+def generate_fallback_documentation(module_info: Dict[str, str]) -> str:
+    """Generate fallback documentation when source parsing fails."""
+    class_name = module_info['class_name']
+    module_path = module_info['module_path']
+    indent = module_info['indent']
+    
+    doc_parts = []
+    doc_parts.append(f"{indent}### {class_name}")
+    doc_parts.append("")
+    doc_parts.append(f"{indent}This class provides specific functionality for NetBox plugin development. Refer to the NetBox source code for detailed implementation.")
+    doc_parts.append("")
+    
+    return '\n'.join(doc_parts)
+
+def process_file(file_path: str) -> bool:
+    """Process a single markdown file to transform autodoc directives."""
+    try:
+        with open(file_path, 'r', encoding='utf-8') as f:
+            content = f.read()
+        
+        original_content = content
+        lines = content.split('\n')
+        processed_lines = []
+        i = 0
+        
+        while i < len(lines):
+            line = lines[i]
+            
+            # Check if this line is an autodoc directive
+            if line.strip().startswith('::: netbox.') or line.strip().startswith('::: utilities.') or line.strip().startswith('::: extras.'):
+                module_info = extract_module_info(line)
+                if module_info:
+                    # Generate documentation for this class
+                    documentation = generate_documentation(module_info)
+                    processed_lines.append(documentation)
+                    
+                    # Skip any following configuration lines
+                    i += 1
+                    while i < len(lines) and (
+                        lines[i].strip().startswith('options:') or
+                        lines[i].strip().startswith('members:') or
+                        lines[i].strip().startswith('- ') or
+                        lines[i].strip() == ''
+                    ):
+                        # Skip configuration lines but break on non-config content
+                        if lines[i].strip() and not lines[i].strip().startswith(('options:', 'members:', '- ')):
+                            break
+                        i += 1
+                    continue
+            
+            # Add non-autodoc lines as-is (no comprehensive escaping)
+            processed_lines.append(line)
+            i += 1
+        
+        # Apply targeted escaping only to specific known problematic content
+        new_content = '\n'.join(processed_lines)
+        new_content = escape_mdx_content(new_content)
+        
+        if new_content != original_content:
+            with open(file_path, 'w', encoding='utf-8') as f:
+                f.write(new_content)
+            return True
+        
+        return False
+    
+    except Exception as e:
+        print(f"Error processing {file_path}: {e}")
+        return False
+
+def main():
+    """Main function to process all markdown files."""
+    # Find all markdown files in the docs directories (not external-repos)
+    doc_patterns = [
+        'docs/netbox/**/*.md',
+        'docs/console/**/*.md',
+    ]
+    
+    total_files = 0
+    processed_files = 0
+    
+    for pattern in doc_patterns:
+        files = glob.glob(pattern, recursive=True)
+        for file_path in files:
+            total_files += 1
+            if process_file(file_path):
+                processed_files += 1
+                print(f"Processed: {file_path}")
+    
+    print(f"\nProcessing complete:")
+    print(f"Total files checked: {total_files}")
+    print(f"Files modified: {processed_files}")
+
+if __name__ == '__main__':
+    main() 
\ No newline at end of file
diff --git a/scripts/transformDocs.ts b/scripts/transformDocs.ts
new file mode 100644
index 00000000..2d4cda09
--- /dev/null
+++ b/scripts/transformDocs.ts
@@ -0,0 +1,956 @@
+const { readFile, writeFile, mkdir, copyFile } = require('fs/promises');
+const { glob } = require('glob');
+const { exec } = require('child_process');
+const { promisify } = require('util');
+const pathModule = require('path');
+const yaml = require('js-yaml');
+
+// Enhanced frontmatter interface for the new system
+interface EnhancedFrontmatter {
+    tags?: string[];
+    title?: string;
+    author?: string;
+    last_updated?: string;
+    versions?: {
+        netbox_cloud?: string;
+        netbox_enterprise?: string;
+        netbox_community?: string;
+    };
+    status?: 'current' | 'deprecated' | 'beta' | 'alpha' | 'archived';
+    description?: string;
+    category?: string;
+    audience?: string;
+    complexity?: string;
+    // Legacy fields for backward compatibility
+    hide?: {
+        navigation?: boolean;
+        toc?: boolean;
+    };
+}
+
+// Version configuration for filtering
+interface VersionConfig {
+    netbox_cloud: string;
+    netbox_enterprise: string;
+    netbox_community: string;
+}
+
+// Default version configuration - should be updated based on current versions
+const DEFAULT_VERSIONS: VersionConfig = {
+    netbox_cloud: "v1.10",
+    netbox_enterprise: "v1.10", 
+    netbox_community: "v4.2"
+};
+
+// Custom YAML schema to handle !ENV tags
+const EnvYamlType = new yaml.Type('!ENV', {
+    kind: 'scalar',
+    construct: () => null, // Treat !ENV tags as null
+});
+
+// Custom YAML type for !!python/name:* tags
+const PythonNameYamlType = new yaml.Type('tag:yaml.org,2002:python/name', {
+    kind: 'scalar', // Or 'mapping'/'sequence' if these tags can apply to complex structures
+    multi: true, // Indicates this type can match multiple specific tags if needed, but here it's for the prefix
+    representName: (tag) => tag.startsWith('tag:yaml.org,2002:python/name:'),
+    construct: () => null, // Treat these Python-specific tags as null
+});
+
+const CUSTOM_YAML_SCHEMA = yaml.DEFAULT_SCHEMA.extend({
+    explicit: [EnvYamlType, PythonNameYamlType],
+});
+
+const execAsync = promisify(exec);
+
+// Function to check if content should be visible based on version and status
+const shouldShowContent = (frontmatter: EnhancedFrontmatter): boolean => {
+    // Always show current content
+    if (!frontmatter.status || frontmatter.status === 'current') {
+        return true;
+    }
+    
+    // Hide deprecated, beta, alpha, and archived content by default
+    // This can be overridden by environment variables in production
+    const showBeta = process.env.SHOW_BETA_CONTENT === 'true';
+    const showAlpha = process.env.SHOW_ALPHA_CONTENT === 'true';
+    const showDeprecated = process.env.SHOW_DEPRECATED_CONTENT === 'true';
+    
+    switch (frontmatter.status) {
+        case 'beta':
+            return showBeta;
+        case 'alpha':
+            return showAlpha;
+        case 'deprecated':
+            return showDeprecated;
+        case 'archived':
+            return false; // Never show archived content
+        default:
+            return true;
+    }
+};
+
+// Function to convert enhanced frontmatter to Docusaurus format
+const convertFrontmatterToDocusaurus = (frontmatter: EnhancedFrontmatter): any => {
+    const docusaurusFrontmatter: any = {};
+    
+    // Convert title
+    if (frontmatter.title) {
+        docusaurusFrontmatter.title = frontmatter.title;
+    }
+    
+    // Convert description for SEO
+    if (frontmatter.description) {
+        docusaurusFrontmatter.description = frontmatter.description;
+    }
+    
+    // Convert tags
+    if (frontmatter.tags && frontmatter.tags.length > 0) {
+        docusaurusFrontmatter.tags = frontmatter.tags;
+    }
+    
+    // Add custom fields for filtering and display
+    if (frontmatter.author) {
+        docusaurusFrontmatter.custom_author = frontmatter.author;
+    }
+    
+    if (frontmatter.last_updated) {
+        docusaurusFrontmatter.custom_last_updated = frontmatter.last_updated;
+    }
+    
+    if (frontmatter.versions) {
+        docusaurusFrontmatter.custom_versions = frontmatter.versions;
+    }
+    
+    if (frontmatter.status) {
+        docusaurusFrontmatter.custom_status = frontmatter.status;
+    }
+    
+    if (frontmatter.category) {
+        docusaurusFrontmatter.custom_category = frontmatter.category;
+    }
+    
+    if (frontmatter.audience) {
+        docusaurusFrontmatter.custom_audience = frontmatter.audience;
+    }
+    
+    if (frontmatter.complexity) {
+        docusaurusFrontmatter.custom_complexity = frontmatter.complexity;
+    }
+    
+    // Handle legacy hide options
+    if (frontmatter.hide) {
+        if (frontmatter.hide.navigation) {
+            docusaurusFrontmatter.sidebar_class_name = 'hidden-sidebar-item';
+        }
+        if (frontmatter.hide.toc) {
+            docusaurusFrontmatter.hide_table_of_contents = true;
+        }
+    }
+    
+    return docusaurusFrontmatter;
+};
+
+// Function to extract and parse frontmatter
+const extractFrontmatter = (content: string): { frontmatter: EnhancedFrontmatter | null, content: string } => {
+    const frontmatterRegex = /^---\s*\n([\s\S]*?)\n---\s*\n/;
+    const match = content.match(frontmatterRegex);
+    
+    if (!match) {
+        return { frontmatter: null, content };
+    }
+    
+    try {
+        const frontmatter = yaml.load(match[1], { schema: CUSTOM_YAML_SCHEMA }) as EnhancedFrontmatter;
+        const contentWithoutFrontmatter = content.replace(frontmatterRegex, '');
+        return { frontmatter, content: contentWithoutFrontmatter };
+    } catch (error) {
+        console.warn('Failed to parse frontmatter:', error);
+        return { frontmatter: null, content };
+    }
+};
+
+// Function to reconstruct frontmatter
+const reconstructFrontmatter = (frontmatter: any): string => {
+    if (!frontmatter || Object.keys(frontmatter).length === 0) {
+        return '';
+    }
+    
+    const frontmatterYaml = yaml.dump(frontmatter, {
+        lineWidth: -1, // Disable line wrapping
+        noRefs: true,
+        sortKeys: false
+    });
+    
+    return `---\n${frontmatterYaml}---\n\n`;
+};
+
+interface TransformRule {
+    find: string | RegExp;
+    replace: string | ((...args: string[]) => string);
+}
+
+const transformRules: TransformRule[] = [
+    // Convert :material-icon-name: and its optional attributes like { .lg .middle } to an empty string
+    {
+        find: /:material-([a-zA-Z0-9_-]+):(?:\{[^}]*\})?/g,
+        replace: (match: string, iconName: string): string => {
+         return ''; // Remove the icon and its attributes
+        }
+    },
+    // New rule for [:octicons-...
+    {
+        find: /^\s*\[:(octicons-[a-zA-Z0-9_-]+):\s*(.*?)\]/gm, // Matches [:octicons-name: Label Text] with optional leading whitespace
+        replace: (match: string, iconName: string, label: string): string => {
+            return label; // Return only the label text for now
+        }
+    },
+    // Transform mkdocstrings autodoc syntax "::: module.path" to better Docusaurus format
+    {
+        find: /^(\s*)::: (netbox\.[a-zA-Z0-9_.]+)(?:\n((?:(?:\1\s+.*|\s*)\n)*?))?(?=\n(?:\1\S|\s*\n|$))/gm,
+        replace: (match: string, indent: string, modulePath: string, configLines?: string): string => {
+            // Extract the class/function name from the module path
+            const pathParts = modulePath.split('.');
+            const className = pathParts[pathParts.length - 1];
+            
+            // Define specific descriptions for NetBox feature mixins
+            const mixinDescriptions: { [key: string]: string } = {
+                'BookmarksMixin': 'Enables support for user bookmarks. Users can bookmark instances of this model for quick access.',
+                'ChangeLoggingMixin': 'Automatically records changes to model instances in the change log. All create, update, and delete operations are tracked.',
+                'CloningMixin': 'Provides the `clone()` method to prepare a copy of an instance with a new primary key for duplication.',
+                'ContactsMixin': 'Enables association of Contact objects with model instances. Introduced in NetBox v4.3.',
+                'CustomLinksMixin': 'Allows the assignment of custom links that appear in the object\'s view. Links can be conditionally displayed based on object attributes.',
+                'CustomFieldsMixin': 'Enables the addition of user-defined custom fields to the model. Custom fields are dynamically added to forms and API serializers.',
+                'CustomValidationMixin': 'Supports the enforcement of custom validation rules beyond Django\'s built-in validation.',
+                'EventRulesMixin': 'Enables event rules that can send webhooks or run custom scripts automatically in response to object changes.',
+                'ExportTemplatesMixin': 'Allows users to create custom export templates for rendering object data in various formats.',
+                'JobsMixin': 'Enables background jobs to be scheduled for model instances. Jobs are executed asynchronously by background workers.',
+                'JournalingMixin': 'Supports persistent historical commentary through journal entries. Users can add notes and comments to object instances.',
+                'TagsMixin': 'Enables tagging of model instances with user-defined tags for organization and filtering.',
+                // View classes
+                'BaseObjectView': 'Base class for single-object views. Provides common functionality for displaying individual model instances.',
+                'ObjectView': 'Generic view for displaying a single object instance with full detail information.',
+                'ObjectEditView': 'Generic view for creating and updating object instances through a web form interface.',
+                'ObjectDeleteView': 'Generic view for confirming and processing object deletion.',
+                'ObjectChildrenView': 'Generic view for displaying child objects related to a parent instance.',
+                'BaseMultiObjectView': 'Base class for views that handle multiple objects simultaneously.',
+                'ObjectListView': 'Generic view for displaying a paginated list of objects with filtering and search capabilities.',
+                'BulkImportView': 'Generic view for bulk importing objects from CSV or other data sources.',
+                'BulkEditView': 'Generic view for editing multiple objects simultaneously.',
+                'BulkDeleteView': 'Generic view for deleting multiple objects in a single operation.',
+                'ObjectChangeLogView': 'Generic view for displaying the change log history of an object.',
+                'ObjectJournalView': 'Generic view for displaying and managing journal entries for an object.',
+                // Search and API classes
+                'SearchIndex': 'Base class for defining search indexes that enable global search functionality for plugin models.',
+                'EventType': 'Base class for defining custom event types that can trigger webhooks and scripts.',
+                'DataBackend': 'Base class for implementing data source backends that can synchronize external data.',
+                'JobRunner': 'Base class for implementing background job executors with scheduling and error handling.',
+                // GraphQL classes
+                'BaseObjectType': 'Base GraphQL object type for exposing plugin models through the GraphQL API.',
+                'NetBoxObjectType': 'NetBox-specific GraphQL object type that includes common NetBox model fields and relationships.',
+                // Table column classes
+                'BooleanColumn': 'Table column for displaying boolean values with checkmarks or icons.',
+                'ChoiceFieldColumn': 'Table column for displaying choice field values with their human-readable labels.',
+                'ColorColumn': 'Table column for displaying color values as colored indicators.',
+                'ColoredLabelColumn': 'Table column for displaying values as colored labels or badges.',
+                'ContentTypeColumn': 'Table column for displaying Django ContentType references.',
+                'ContentTypesColumn': 'Table column for displaying multiple ContentType references.',
+                'MarkdownColumn': 'Table column for rendering Markdown content as HTML.',
+                'TagColumn': 'Table column for displaying model tags.',
+                'TemplateColumn': 'Table column that renders content using a custom template.'
+            };
+            
+            const description = mixinDescriptions[className] || 'This class provides specific functionality for NetBox plugin development. Refer to the NetBox source code for detailed implementation.';
+            
+            // Create a detailed documentation block
+            let result = `${indent}#### ${className}\n\n`;
+            result += `${indent}**Module:** \`${modulePath}\`\n\n`;
+            result += `${indent}${description}\n\n`;
+            
+            // Add usage information for known mixins
+            if (mixinDescriptions[className]) {
+                result += `${indent}**Usage:**\n`;
+                result += `${indent}\`\`\`python\n`;
+                result += `${indent}from netbox.models.features import ${className}\n`;
+                result += `${indent}from django.db import models\n\n`;
+                result += `${indent}class MyModel(${className}, models.Model):\n`;
+                result += `${indent}    # Your model fields here\n`;
+                result += `${indent}    pass\n`;
+                result += `${indent}\`\`\`\n\n`;
+            }
+            
+            // Process configuration lines if present
+            if (configLines && configLines.trim()) {
+                const lines = configLines.split('\n').filter(line => line.trim());
+                let inMembers = false;
+                let members: string[] = [];
+                
+                for (const line of lines) {
+                    const trimmedLine = line.trim();
+                    if (trimmedLine.startsWith('options:') || trimmedLine.startsWith('members:')) {
+                        inMembers = trimmedLine.startsWith('members:');
+                        // Extract inline members if present (e.g., "members: false" or "members: get_object")
+                        const inlineValue = trimmedLine.split(':')[1]?.trim();
+                        if (inlineValue && inlineValue !== 'false' && !inlineValue.startsWith('[')) {
+                            members.push(inlineValue);
+                        }
+                    } else if (inMembers && trimmedLine.startsWith('-')) {
+                        // Extract list item (e.g., "- get_object")
+                        const member = trimmedLine.substring(1).trim();
+                        if (member) {
+                            members.push(member);
+                        }
+                    }
+                }
+                
+                // Add members information if found
+                if (members.length > 0) {
+                    result += `${indent}**Key Methods:**\n`;
+                    for (const member of members) {
+                        result += `${indent}- \`${member}()\`\n`;
+                    }
+                    result += `\n`;
+                }
+            }
+            
+            return result;
+        }
+    },
+    // Remove orphaned mkdocstrings configuration blocks that appear after autodoc transformation
+    {
+        find: /^\s*options:\s*\n(?:\s*members?:\s*(?:false|true|\[.*?\]|.*?)\n?(?:\s*- .*\n)*)?/gm,
+        replace: ''
+    },
+    // Remove standalone members configuration lines with list items
+    {
+        find: /^\s*members?:\s*(?:false|true|\[.*?\]|.*?)\n?(?:\s*- .*\n)*/gm,
+        replace: ''
+    },
+    // Remove orphaned list items that start with dash (from member lists)
+    {
+        find: /^\s*- [a-zA-Z_][a-zA-Z0-9_]*\n/gm,
+        replace: ''
+    },
+    // Remove options blocks with blank lines and indented list items
+    {
+        find: /^\s*options:\s*\n\s*\n(?:\s+- [a-zA-Z_][a-zA-Z0-9_]*\n)*/gm,
+        replace: ''
+    },
+    // Remove members lines followed by list items
+    {
+        find: /^\s*members:\s*\n(?:\s+- [a-zA-Z_][a-zA-Z0-9_]*\n)*/gm,
+        replace: ''
+    },
+    // Remove standalone options: lines
+    {
+        find: /^\s*options:\s*\n/gm,
+        replace: ''
+    },
+    // Remove standalone members: lines (including false/true values)
+    {
+        find: /^\s*members:\s*(?:false|true)?\s*\n/gm,
+        replace: ''
+    },
+    // Remove complete configuration block patterns with options and list items
+    {
+        find: /\n\s*options:\s*\n\s*\n(?:\s+- [a-zA-Z_][a-zA-Z0-9_]*\s*\n)*/gm,
+        replace: '\n'
+    },
+    // Remove remaining orphaned configuration blocks
+    {
+        find: /\n\s*options:\s*\n(?:\s+- [a-zA-Z_][a-zA-Z0-9_]*\s*\n)*/gm,
+        replace: '\n'
+    },
+    // Escape bare <> symbols.
+    { find: /<>/g, replace: '\\<\\>' },
+    // Standardise <br> and </br> to self-closing <br/> with a newline.
+    { find: /<\/?br>/g, replace: '<br/>\n' },
+    // Convert markdown image with simple width percentage to a styled div.
+    { find: /!\[(.*?)\]\((.*?)\)\{ width=(\d+)% \}/g, replace: '<div style={{width:"$3%"}}>![$1]($2)</div>' },
+    // Convert markdown image with max-width style to a styled div.
+    { find: /!\[(.*?)\]\((.*?)\)\{\s*style="max-width:\s*(\d+)\s*%"\s*\}/g, replace: '<div style={{maxWidth:"$3%"}}>![$1]($2)</div>' },
+    // Escape angle brackets around raw URLs.
+    { find: /<https?:\/\/[^>]+>/g, replace: (match: string) => `\\<${match.slice(1, -1)}\\>` },
+    // Escape placeholder patterns in angle brackets (e.g., <netbox-server>, <diode-server:port>)
+    // Only escape patterns that contain hyphens or colons (typical of placeholders, not HTML tags)
+    { find: /<([a-zA-Z0-9_-]*(?:-|:)[a-zA-Z0-9_:-]+)>/g, replace: (match: string, placeholder: string) => `\\<${placeholder}\\>` },
+    // Escape <pk\> tag.
+    { find: /<pk\\>/g, replace: '\\<pk\\>' },
+    // Convert markdown image with MkDocs-style class and width attributes to a styled div.
+    { find: /!\[(.*?)\]\((.*?)\)\{:class="([^"]+)" width="(\d+)"\}/g, replace: '<div className="$3" style={{width:"$4px"}}>![$1]($2)</div>' },
+    // Convert markdown image with complex inline styles attribute to a styled div with React style object.
+    {
+        find: /!\[(.*?)\]\(([^)]*?)\)\{.*?style="([^"]*)".*?\}/g,
+        replace: (match: string, altText: string, urlPart: string, stylesStr: string): string => {
+            const stylePairs = stylesStr
+                .split(';')
+                .map(s => s.trim())
+                .filter(s => s.length > 0)
+                .map(pair => {
+                    const separatorIndex = pair.indexOf(':');
+                    if (separatorIndex === -1) return null;
+                    const key = pair.substring(0, separatorIndex).trim();
+                    const value = pair.substring(separatorIndex + 1).trim();
+                    if (!key || !value) return null; // Skip if key or value is empty after trim
+
+                    const camelKey = key.replace(/-([a-z])/g, (g) => g[1].toUpperCase());
+                    // Quote value if it's not a plain number
+                    const quotedValue = /^\d+(\.\d+)?$/.test(value) ? value : `'${value.replace(/'/g, "\\'")}'`;
+                    return `${camelKey}: ${quotedValue}`;
+                })
+                .filter((pair): pair is string => pair !== null); // Type guard for filtering nulls
+
+            if (stylePairs.length === 0) {
+                 // Fallback to original markdown image if no valid styles found
+                return `![${altText}](${urlPart})`;
+            }
+
+            const reactStyleObjectInner = stylePairs.join(', ');
+            return `<div style={{${reactStyleObjectInner}}}>![${altText}](${urlPart})</div>`;
+        }
+    },
+    // Remove leading slash from image paths starting with /images/.
+    { find: /!\[(.*?)\]\(\/(images\/[^)]+)\)/g, replace: '![$1]($2)' },
+
+    // New rule for specific emoji-like icons (e.g., :bug:, :bulb:)
+    {
+        find: /:(bug|bulb|arrow_heading_up|jigsaw|rescue_worker_helmet|heart|information_source|thumbsup|thumbsdown):/g,
+        replace: (match: string, iconName: string): string => {
+            return iconName; // Remove colons, leave the name (hoping for unicode rendering or just text)
+        }
+    },
+    // Rule for :warning:
+    {
+        find: /:warning:/g,
+        replace: '⚠️' // Replace with unicode warning emoji
+    },
+
+    // Note: Removed curly brace escaping to avoid interfering with JSX style objects
+    // Remove standalone mkdocstrings configuration blocks that weren't captured above
+    {
+        find: /```\n\n\n    options:\n(?:      .*\n)*/gm,
+        replace: '```\n\n'
+    },
+    // Fix broken anchor links that reference the old autodoc format
+    {
+        find: /\(([^)]+)#netbox\.search\.SearchIndex\)/g,
+        replace: '($1#searchindex)'
+    }
+];
+
+// Add a final cleanup transformation rule at the end
+const finalCleanupRules: TransformRule[] = [
+    // Final cleanup: remove any remaining configuration blocks
+    {
+        find: /(?:^|\n)\s*options:\s*\n(?:\s*\n)?\s*(?:- [a-zA-Z_][a-zA-Z0-9_]*\s*\n)*/gm,
+        replace: '\n'
+    },
+    // Final cleanup: remove any remaining member configuration lines  
+    {
+        find: /(?:^|\n)\s*members:\s*(?:false|true|\[.*?\]|[a-zA-Z_][a-zA-Z0-9_]*)?(?:\s*\n(?:\s*- [a-zA-Z_][a-zA-Z0-9_]*\s*\n)*)?/gm,
+        replace: '\n'
+    }
+];
+
+interface DocsDirectoryConfig {
+    source: string;
+    output: string;
+}
+
+const docsDirectories: DocsDirectoryConfig[] = [
+  { source: 'external-repos/netbox/docs', output: 'netbox' },
+  { source: 'external-repos/console-docs/docs', output: 'console' },
+];
+
+// Helper to get leading indentation
+const getIndent = (line: string): string => {
+  const match = line.match(/^(\s*)/);
+  return match ? match[1] : '';
+};
+
+// Find the URL rule specifically
+const urlRule = transformRules.find(rule => rule.find.toString() === /<https?:\/\/[^>]+>/g.toString());
+// Filter out the URL rule from the main list to avoid applying it twice
+const otherRules = transformRules.filter(rule => rule !== urlRule);
+
+interface MkDocsNavItem {
+    [key: string]: string | MkDocsNavItem[] | undefined;
+}
+
+interface DocusaurusSidebarItem {
+    type: 'category' | 'doc';
+    label: string;
+    id?: string; // Present for 'doc', absent for 'category'
+    items?: DocusaurusSidebarItem[]; // Present for 'category', absent for 'doc'
+    link?: { // Optional: For generated category index pages
+        type: 'generated-index';
+        title?: string;
+    };
+}
+
+const mapNavToDocusaurus = (navItems: MkDocsNavItem[], basePathForId: string): DocusaurusSidebarItem[] => {
+    return navItems.map((item) => {
+        const key = Object.keys(item)[0];
+        const value = item[key];
+
+        if (typeof value === 'string') {
+            // Remove .md extension
+            let docPath = value.replace(/\.md$/, '');
+            const pathParts = docPath.split('/');
+            let filename = pathParts.pop() || ''; // Get the last part, the filename
+
+            // Regex to match a number prefix like "1-", "01-", etc.
+            const numericPrefixRegex = /^\d+-/;
+            // Regex to match an alphanumeric prefix like "4a-", "1b-", etc.
+            const alphanumericPrefixRegex = /^\d+[a-zA-Z]+-/;
+
+            if (numericPrefixRegex.test(filename) && !alphanumericPrefixRegex.test(filename)) {
+                // If it has a purely numeric prefix (e.g., "1-thing"), remove it
+                filename = filename.replace(numericPrefixRegex, '');
+            }
+
+            // Reconstruct the docPath with the potentially modified filename
+            docPath = pathParts.length > 0 ? `${pathParts.join('/')}/${filename}` : filename;
+
+            return {
+                type: 'doc',
+                id: `${basePathForId}/${docPath}`,
+                label: key,
+            };
+        }
+
+        if (Array.isArray(value)) {
+            return {
+                type: 'category',
+                label: key,
+                items: mapNavToDocusaurus(value, basePathForId),
+            };
+        }
+
+        console.warn('Skipping unexpected nav item format:', item);
+        return null;
+    }).filter(item => item !== null) as DocusaurusSidebarItem[];
+};
+
+const transformContent = async (content: string, sourceFilePath: string, outputBaseDir: string): Promise<string> => {
+    // Extract and process frontmatter first
+    const { frontmatter, content: contentWithoutFrontmatter } = extractFrontmatter(content);
+    
+    // Check if content should be visible based on version and status
+    if (frontmatter && !shouldShowContent(frontmatter)) {
+        console.log(`Skipping ${sourceFilePath} due to version/status filtering`);
+        return ''; // Return empty content to skip this file
+    }
+    
+    const fencedCodeBlocks: string[] = [];
+    const inlineCodeBlocks: string[] = [];
+    let tempContent = contentWithoutFrontmatter;
+
+    // Transformation for console docs image paths
+    if (outputBaseDir === 'console') {
+        // Calculate depth from docs/console/sub/path/file.md to docs/console/images/
+        // Example: docs/console/netbox-integrations/servicenow/index.md
+        // Relative path to docs/console/ is ../../ (2 levels up)
+        // So, image path should be ../../images/integrations/service-now/actual-image.png
+        const relativePathPrefix = sourceFilePath
+            .replace(/^external-repos\/console-docs\/docs\//, '') // Remove base path
+            .split('/')
+            .slice(0, -1) // Remove filename
+            .map(() => '..')
+            .join('/');
+
+        // Regex to find <img src="/images/...">
+        const imgTagRegex = /<img\s+([^>]*?)src="\/images\/([^"]+)"([^>]*?)>/g;
+        tempContent = tempContent.replace(imgTagRegex, (match, beforeSrc, imgPath, afterSrc) => {
+            // imgPath will be like "integrations/service-now/service-now-object-map.png"
+            // Prepend a slash to make it root-relative, served by staticDirectories config.
+            const newSrc = `/${imgPath}`;
+            return `<img ${beforeSrc}src="${newSrc}"${afterSrc}>`;
+        });
+    }
+
+    // 0. Apply URL escaping rule FIRST to the entire content
+    if (urlRule) {
+        if (typeof urlRule.replace === 'string') {
+            tempContent = tempContent.replace(urlRule.find, urlRule.replace);
+        } else {
+            tempContent = tempContent.replace(urlRule.find, urlRule.replace);
+        }
+    }
+
+    // Targeted fix for SAML placeholders to prevent MDX parsing errors
+    tempContent = tempContent.replace(/\{NetBox Enterprise URL\}/g, '`{NetBox Enterprise URL}`');
+
+    // 1. Extract and replace fenced code blocks (from already URL-escaped content)
+    // Regex captures the full match including delimiters and content
+    tempContent = tempContent.replace(/^```\s*([a-zA-Z0-9-+]*)?\s*\n([\s\S]*?)\n```$/gm, (match, lang, blockContent) => {
+        const placeholder = `__FENCED_CODE_BLOCK_${fencedCodeBlocks.length}__`;
+        fencedCodeBlocks.push(match); // Store the full block
+        return placeholder;
+    });
+
+    // 2. Extract and replace inline code blocks (from already URL-escaped content)
+    // Regex captures the content including backticks
+    tempContent = tempContent.replace(/`([^`\n]+?)`/g, (match) => {
+        // Basic check to avoid matching within already replaced fenced block placeholders
+        if (match.includes('__FENCED_CODE_BLOCK_')) return match;
+        const placeholder = `__INLINE_CODE_BLOCK_${inlineCodeBlocks.length}__`;
+        inlineCodeBlocks.push(match); // Store the inline code including backticks
+        return placeholder;
+    });
+
+    // 3. Process content with placeholders (including admonition logic)
+    const lines = tempContent.split('\n');
+    const outputLines: string[] = [];
+    const admonitionIndentStack: string[] = []; // Stack to store indent strings
+    const admonitionStartRegex = /^(\s*)!!!\s+(\w+)(?:\s+["'](.*?)["'])?\s*$/;
+
+    for (const line of lines) {
+        let currentLine = line;
+        const currentIndent = getIndent(currentLine);
+        const currentIndentLength = currentIndent.length;
+
+        // Admonition closing logic (adjusted for placeholders)
+        while (admonitionIndentStack.length > 0) {
+            const lastIndent = admonitionIndentStack[admonitionIndentStack.length - 1];
+            const lastIndentLength = lastIndent.length;
+            let shouldClose = false;
+            
+            // Always close if current line has less indentation
+            if (currentIndentLength < lastIndentLength) {
+                shouldClose = true;
+            } 
+            // For same indentation level, close if:
+            // 1. Line is not empty AND
+            // 2. It's not a code block placeholder AND  
+            // 3. Either it's not an admonition start OR it IS an admonition start (new admonition at same level should close previous)
+            else if (currentIndentLength === lastIndentLength &&
+                       currentLine.trim() !== '' &&
+                     !currentLine.includes('__FENCED_CODE_BLOCK_') && 
+                     !currentLine.includes('__INLINE_CODE_BLOCK_')) {
+                shouldClose = true;
+            }
+
+            if (shouldClose) {
+                admonitionIndentStack.pop();
+                // Add closing ::: marker, attempting to place it before placeholders if necessary
+                let insertIndex = outputLines.length;
+                while (insertIndex > 0 &&
+                       (outputLines[insertIndex - 1]?.includes('__FENCED_CODE_BLOCK_') ||
+                        outputLines[insertIndex - 1]?.includes('__INLINE_CODE_BLOCK_'))) {
+                    insertIndex--;
+                }
+                outputLines.splice(insertIndex, 0, `${lastIndent}:::`);
+            } else {
+                break; // Don't close, break the inner loop
+            }
+        }
+
+        // Admonition starting logic (unchanged)
+        const admonitionMatch = currentLine.match(admonitionStartRegex);
+        if (admonitionMatch) {
+            const [, indent, type, title] = admonitionMatch;
+            admonitionIndentStack.push(indent);
+            let newLine = `${indent}:::${type.toLowerCase()}`;
+            if (title) {
+                const cleanTitle = title.replace(/]/g, '\\]'); // Basic escape for title
+                newLine += `[${cleanTitle}]`;
+            }
+            currentLine = newLine;
+        }
+
+        // Apply OTHER transformation rules to the line (placeholders won't match rule patterns)
+        let processedLine = currentLine;
+        otherRules.forEach(rule => { // Use the filtered list of rules
+            if (typeof rule.replace === 'string') {
+                processedLine = processedLine.replace(rule.find, rule.replace);
+            } else {
+                processedLine = processedLine.replace(rule.find, rule.replace);
+            }
+        });
+
+        outputLines.push(processedLine);
+    }
+
+    // Close any remaining open admonitions at the end
+    while (admonitionIndentStack.length > 0) {
+        const closingIndent = admonitionIndentStack.pop();
+        if (closingIndent !== undefined) {
+             // Add closing ::: marker, attempting to place it before placeholders if necessary
+            let insertIndex = outputLines.length;
+            while (insertIndex > 0 &&
+                   (outputLines[insertIndex - 1]?.includes('__FENCED_CODE_BLOCK_') ||
+                    outputLines[insertIndex - 1]?.includes('__INLINE_CODE_BLOCK_'))) {
+                insertIndex--;
+            }
+            outputLines.splice(insertIndex, 0, `${closingIndent}:::`);
+        }
+    }
+
+    let transformedContentWithPlaceholders = outputLines.join('\n');
+
+    // Transform the "Eager to Get Started" block into a Docusaurus note
+    const eagerBlockRegex = /<div class="grid cards" markdown>\s*-\s+__([^_]+)__\s*---\s*([\s\S]*?)\s*(.+?)\((https?:\/\/[^)]+)\)\s*<\/div>/gm;
+    transformedContentWithPlaceholders = transformedContentWithPlaceholders.replace(eagerBlockRegex, (match, title, body, linkText, linkUrl) => {
+        const cleanedTitle = title.trim();
+        const cleanedBody = body.trim();
+        const cleanedLinkText = linkText.trim();
+        const cleanedLinkUrl = linkUrl.trim();
+        // Use Docusaurus button classes for the link
+        return `:::note[${cleanedTitle}]\n\n${cleanedBody}\n\n<a href="${cleanedLinkUrl}" className="button button--primary">${cleanedLinkText}</a>\n:::`;
+    });
+
+    // Original master branch escaping rule - works perfectly on all Vercel Node.js versions (18.x, 20.x, 22.x)  
+    // Negative lookbehind has been supported since Node.js 9.0.0
+    // Use single backslash escaping to match master branch behavior
+    transformedContentWithPlaceholders = transformedContentWithPlaceholders.replace(/(?<!\\){([^{}]+)}(?!})/g, '\\{$1\\}');
+
+    // 4. Restore inline code blocks
+    inlineCodeBlocks.forEach((block, index) => {
+        const placeholder = `__INLINE_CODE_BLOCK_${index}__`;
+        // Use split/join for global replacement
+        transformedContentWithPlaceholders = transformedContentWithPlaceholders.split(placeholder).join(block);
+    });
+
+    // 5. Restore fenced code blocks
+    fencedCodeBlocks.forEach((block, index) => {
+        const placeholder = `__FENCED_CODE_BLOCK_${index}__`;
+        transformedContentWithPlaceholders = transformedContentWithPlaceholders.split(placeholder).join(block);
+    });
+
+    // 6. Apply final cleanup rules to remove any remaining configuration blocks
+    finalCleanupRules.forEach(rule => {
+        if (typeof rule.replace === 'string') {
+            transformedContentWithPlaceholders = transformedContentWithPlaceholders.replace(rule.find, rule.replace);
+        } else {
+            transformedContentWithPlaceholders = transformedContentWithPlaceholders.replace(rule.find, rule.replace);
+        }
+    });
+
+    // 7. Process and reconstruct frontmatter
+    let docusaurusFrontmatter: any = {};
+    if (frontmatter) {
+        docusaurusFrontmatter = convertFrontmatterToDocusaurus(frontmatter);
+        
+        // Add enhanced metadata if not present
+        if (!frontmatter.author) {
+            docusaurusFrontmatter.custom_author = 'NetBox Labs';
+        }
+        
+        if (!frontmatter.last_updated) {
+            // Use current date as fallback
+            docusaurusFrontmatter.custom_last_updated = new Date().toISOString().split('T')[0];
+        }
+        
+        if (!frontmatter.versions) {
+            // Apply default versions based on output directory
+            if (outputBaseDir === 'console') {
+                docusaurusFrontmatter.custom_versions = DEFAULT_VERSIONS;
+            } else {
+                // For NetBox community docs
+                docusaurusFrontmatter.custom_versions = {
+                    netbox_community: DEFAULT_VERSIONS.netbox_community
+                };
+            }
+        }
+        
+        if (!frontmatter.status) {
+            docusaurusFrontmatter.custom_status = 'current';
+        }
+    } else {
+        // Add basic metadata for files without frontmatter
+        docusaurusFrontmatter = {
+            custom_author: 'NetBox Labs',
+            custom_last_updated: new Date().toISOString().split('T')[0],
+            custom_status: 'current',
+            custom_versions: outputBaseDir === 'console' ? DEFAULT_VERSIONS : {
+                netbox_community: DEFAULT_VERSIONS.netbox_community
+            }
+        };
+    }
+
+    // Reconstruct the content with Docusaurus-compatible frontmatter
+    const frontmatterString = reconstructFrontmatter(docusaurusFrontmatter);
+    
+    return frontmatterString + transformedContentWithPlaceholders;
+};
+
+const processFile = async (sourceFilePath: string, outputBaseDir: string, sourceBaseDir: string): Promise<void> => {
+    const relativePath = pathModule.relative(sourceBaseDir, sourceFilePath);
+    const outputFilePath = pathModule.join('docs', outputBaseDir, relativePath);
+
+    try {
+        await mkdir(pathModule.dirname(outputFilePath), { recursive: true });
+
+        if (sourceFilePath.endsWith('.md')) {
+            const content = await readFile(sourceFilePath, 'utf-8');
+            const transformedContent = await transformContent(content, sourceFilePath, outputBaseDir);
+            
+            // Skip writing if content is empty (filtered out due to version/status)
+            if (transformedContent.trim() === '') {
+                console.log(`Skipped writing ${outputFilePath} - content filtered out`);
+                return;
+            }
+            
+            await writeFile(outputFilePath, transformedContent);
+        } else {
+            // For non-markdown files, just copy them
+            await copyFile(sourceFilePath, outputFilePath);
+        }
+
+    } catch (error) {
+        console.error(`Error processing ${sourceFilePath} to ${outputFilePath}:`, error);
+    }
+};
+
+const postProcessConsoleSidebar = (sidebar: DocusaurusSidebarItem[]): DocusaurusSidebarItem[] => {
+    // Find NetBox Discovery and NetBox Assurance sections
+    const discoveryIndex = sidebar.findIndex(item => item.label === 'NetBox Discovery');
+    const assuranceIndex = sidebar.findIndex(item => item.label === 'NetBox Assurance');
+    
+    if (discoveryIndex === -1 || assuranceIndex === -1) {
+        return sidebar; // Return unchanged if sections not found
+    }
+    
+    const discoverySection = sidebar[discoveryIndex];
+    const assuranceSection = sidebar[assuranceIndex];
+    
+    // Remove the original sections
+    const newSidebar = sidebar.filter((_, index) => index !== discoveryIndex && index !== assuranceIndex);
+    
+    // Create enhanced Discovery & Assurance structure with complete navigation
+    const discoveryAssuranceSection: DocusaurusSidebarItem = {
+        type: 'category',
+        label: 'Discovery & Assurance',
+        items: [
+            // NetBox Discovery with complete navigation
+            {
+                type: 'category',
+                label: 'NetBox Discovery',
+                items: [
+                    {
+                        type: 'doc',
+                        id: 'console/netbox-discovery/index',
+                        label: 'Overview'
+                    },
+                    {
+                        type: 'category',
+                        label: 'Discovery Agent',
+                        items: [
+                            {
+                                type: 'doc',
+                                id: 'console/netbox-discovery/agent/index',
+                                label: 'Overview'
+                            },
+                            {
+                                type: 'doc',
+                                id: 'console/netbox-discovery/agent/get-started',
+                                label: 'Getting Started'
+                            },
+                            {
+                                type: 'doc',
+                                id: 'console/netbox-discovery/agent/configuration-file',
+                                label: 'Configuration Format'
+                            },
+                            {
+                                type: 'doc',
+                                id: 'console/netbox-discovery/agent/network_discovery',
+                                label: 'Network Discovery'
+                            },
+                            {
+                                type: 'doc',
+                                id: 'console/netbox-discovery/agent/device_discovery',
+                                label: 'Device Discovery'
+                            },
+                            {
+                                type: 'doc',
+                                id: 'console/netbox-discovery/agent/config_samples',
+                                label: 'Configuration Samples'
+                            }
+                        ]
+                    }
+                ]
+            },
+            // NetBox Assurance with complete navigation
+            {
+                type: 'category', 
+                label: 'NetBox Assurance',
+                items: [
+                    {
+                        type: 'doc',
+                        id: 'console/netbox-assurance/index',
+                        label: 'Overview'
+                    },
+                    {
+                        type: 'doc',
+                        id: 'console/netbox-assurance/using-the-ui',
+                        label: 'Using the UI'
+                    }
+                ]
+            }
+        ]
+    };
+    
+    // Insert the new section at the position where NetBox Discovery was
+    newSidebar.splice(discoveryIndex, 0, discoveryAssuranceSection);
+    
+    return newSidebar;
+};
+
+const transformDocs = async (): Promise<void> => {
+    console.log('\nStarting documentation transformation and copy...');
+    for (const dirConfig of docsDirectories) {
+        const { source, output } = dirConfig;
+        const outputBaseDir = pathModule.join('docs', output); // Define output path within project 'docs' folder
+
+        try {
+            // Use the modern glob API which returns a Promise
+            const files = await glob(`${source}/**/*`, { nodir: true });
+
+            if (!files || files.length === 0) {
+                console.warn(`No files found in ${source}`);
+                continue; // Skip to the next directory config
+            }
+            console.log(`Found ${files.length} files in ${source}. Transforming and copying to ${outputBaseDir}...`);
+
+            // Process each file found
+            await Promise.all(files.map(file => processFile(file, output, source)));
+
+            // After processing files, generate the sidebar
+            console.log(`Generating sidebar for ${output}...`);
+            const mkdocsConfigPath = pathModule.join(source, '..', 'mkdocs.yml');
+            console.log(`Using mkdocs.yml at ${mkdocsConfigPath}`);
+            try {
+                const mkdocsConfigContent = await readFile(mkdocsConfigPath, 'utf-8');
+                const mkdocsConfig = yaml.load(mkdocsConfigContent, { schema: CUSTOM_YAML_SCHEMA }) as { nav?: MkDocsNavItem[] };
+
+                if (mkdocsConfig?.nav) {
+
+                    let docusaurusSidebarItems = mapNavToDocusaurus(mkdocsConfig.nav, output).filter(item => item.label !== 'Home' && item.id !== `${output}/index`);
+                    docusaurusSidebarItems.unshift({ type: 'doc', id: `${output}/index`, label: 'Home' });
+                    
+                    // Post-process console sidebar to reorganize Discovery & Assurance
+                    if (output === 'console') {
+                        docusaurusSidebarItems = postProcessConsoleSidebar(docusaurusSidebarItems);
+                    }
+                    
+                    const sidebarJsonPath = pathModule.join('sidebars', `${output}.json`); // Dynamic output path
+                    await writeFile(sidebarJsonPath, JSON.stringify(docusaurusSidebarItems, null, 2));
+                    console.log(`Successfully generated and wrote sidebar to ${sidebarJsonPath}`);
+                } else {
+                    console.warn(`'nav' section not found in ${mkdocsConfigPath}. Sidebar not generated.`);
+                }
+            } catch (error) {
+                console.error(`Error processing mkdocs.yml for ${output}:`, error);
+            }
+
+        } catch (error) {
+            console.error(`Error processing directory configuration ${JSON.stringify(dirConfig)}:`, error);
+        }
+    }
+};
+
+transformDocs()
+    .then(() => console.log('\nDocumentation transformation and copy complete'))
+    .catch(error => {
+        console.error('\nAn error occurred during the process:', error);
+    });
\ No newline at end of file
diff --git a/scripts/update-changes-docs.sh b/scripts/update-changes-docs.sh
deleted file mode 100755
index b5dd1fb6..00000000
--- a/scripts/update-changes-docs.sh
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/bin/bash
-# Update NetBox Changes documentation from source repository
-# Usage: ./scripts/update-changes-docs.sh
-
-set -e
-
-REPO_URL="https://github.com/netboxlabs/netbox-changes.git"
-TARGET_DIR="docs/netbox-extensions/changes"
-TEMP_DIR="/tmp/netbox-changes-update"
-
-echo "🔄 Updating NetBox Changes documentation..."
-
-# Clean up any existing temp directory
-rm -rf "$TEMP_DIR"
-
-# Clone the source repository
-echo "📥 Cloning source repository..."
-git clone "$REPO_URL" "$TEMP_DIR"
-
-# Remove existing documentation
-echo "🗑️  Removing existing documentation..."
-rm -rf "$TARGET_DIR"/*
-
-# Copy only the docs content
-echo "📋 Copying documentation content..."
-mkdir -p "$TARGET_DIR"
-cp -r "$TEMP_DIR/docs/"* "$TARGET_DIR/"
-
-# Clean up temp directory
-echo "🧹 Cleaning up..."
-rm -rf "$TEMP_DIR"
-
-echo "✅ NetBox Changes documentation updated successfully!"
-echo ""
-echo "Next steps:"
-echo "1. Review the changes: git diff"
-echo "2. Test the build: python -m mkdocs build"
-echo "3. Commit the updates: git add $TARGET_DIR && git commit -m 'Update NetBox Changes documentation'"
-echo "4. Push the changes: git push"
\ No newline at end of file
diff --git a/sidebars.ts b/sidebars.ts
new file mode 100644
index 00000000..7eb1770e
--- /dev/null
+++ b/sidebars.ts
@@ -0,0 +1,29 @@
+import type { SidebarsConfig } from "@docusaurus/plugin-content-docs";
+import consoleSidebar from "./sidebars/console.json";
+import netboxSidebar from "./sidebars/netbox.json";
+
+/**
+ * Creating a sidebar enables you to:
+ - create an ordered group of docs
+ - render a sidebar for each doc of that group
+ - provide next/previous navigation
+
+ The sidebars can be generated from the filesystem, or explicitly defined here.
+
+ Create as many sidebars as you want.
+ */
+
+
+const sidebars: SidebarsConfig = {
+	defaultSidebar: [
+
+		{
+			type: "category",
+			label: "NetBox",
+			items: netboxSidebar as any
+		},
+		...consoleSidebar
+	],
+};
+
+export default sidebars;
diff --git a/sidebars/console.json b/sidebars/console.json
new file mode 100644
index 00000000..b32f8e1e
--- /dev/null
+++ b/sidebars/console.json
@@ -0,0 +1,624 @@
+[
+  {
+    "type": "doc",
+    "id": "console/index",
+    "label": "Home"
+  },
+  {
+    "type": "category",
+    "label": "Cloud",
+    "items": [
+      {
+        "type": "doc",
+        "id": "console/NetBox Cloud/migrating-to-netbox-cloud",
+        "label": "Migrating to NetBox Cloud"
+      },
+      {
+        "type": "category",
+        "label": "Administration via Console",
+        "items": [
+          {
+            "type": "doc",
+            "id": "console/Administration Console/console-access",
+            "label": "Getting Console Access"
+          },
+          {
+            "type": "doc",
+            "id": "console/Administration Console/set_up_2fa",
+            "label": "Setting up Two-Factor Authentication"
+          },
+          {
+            "type": "doc",
+            "id": "console/Administration Console/retrieving-nbc-credentials",
+            "label": "Retrieving NetBox Admin Credentials"
+          },
+          {
+            "type": "doc",
+            "id": "console/Administration Console/console-admin-accounts",
+            "label": "Adding Admin Users to Console"
+          },
+          {
+            "type": "doc",
+            "id": "console/Administration Console/netbox-cloud-plugins",
+            "label": "Viewing Installed Plugins"
+          },
+          {
+            "type": "doc",
+            "id": "console/Administration Console/working_with_database_backups",
+            "label": "Database Backups"
+          },
+          {
+            "type": "doc",
+            "id": "console/Administration Console/upgrading-nbc",
+            "label": "Upgrading NetBox"
+          },
+          {
+            "type": "doc",
+            "id": "console/Administration Console/managing-hostnames",
+            "label": "Managing Hostnames"
+          }
+        ]
+      },
+      {
+        "type": "category",
+        "label": "Security",
+        "items": [
+          {
+            "type": "doc",
+            "id": "console/Administration Console/prefix-lists",
+            "label": "Prefix Lists"
+          },
+          {
+            "type": "doc",
+            "id": "console/Administration Console/public-ip-addressing",
+            "label": "Public IP Addressing"
+          }
+        ]
+      },
+      {
+        "type": "category",
+        "label": "Single Sign-On (SSO)",
+        "items": [
+          {
+            "type": "category",
+            "label": "Entra ID",
+            "items": [
+              {
+                "type": "doc",
+                "id": "console/Administration Console/azure-ad-sso-setup",
+                "label": "Microsoft Entra ID SSO"
+              },
+              {
+                "type": "doc",
+                "id": "console/Administration Console/azure-group-mapping",
+                "label": "Entra ID Group Mapping"
+              }
+            ]
+          },
+          {
+            "type": "category",
+            "label": "Okta",
+            "items": [
+              {
+                "type": "doc",
+                "id": "console/Administration Console/okta-sso-setup",
+                "label": "Okta SSO"
+              },
+              {
+                "type": "doc",
+                "id": "console/Administration Console/okta-group-mapping",
+                "label": "Okta Group Mapping"
+              }
+            ]
+          },
+          {
+            "type": "category",
+            "label": "SAML",
+            "items": [
+              {
+                "type": "doc",
+                "id": "console/Administration Console/saml-sso-setup",
+                "label": "SAML SSO Setup"
+              },
+              {
+                "type": "doc",
+                "id": "console/Administration Console/saml-group-map",
+                "label": "SAML Group Mapping"
+              }
+            ]
+          }
+        ]
+      },
+      {
+        "type": "category",
+        "label": "Free Plan",
+        "items": [
+          {
+            "type": "doc",
+            "id": "console/Administration Console/free-plan-features",
+            "label": "Features"
+          },
+          {
+            "type": "doc",
+            "id": "console/Administration Console/free-plan-new-user",
+            "label": "Add a New User"
+          }
+        ]
+      },
+      {
+        "type": "category",
+        "label": "Cloud Connectivity",
+        "items": [
+          {
+            "type": "doc",
+            "id": "console/cloud-connectivity/do-i-need-cloud-connectivity",
+            "label": "Do I Need Cloud Connectivity Options?"
+          },
+          {
+            "type": "category",
+            "label": "Cloud Connectivity Options",
+            "items": [
+              {
+                "type": "doc",
+                "id": "console/cloud-connectivity/which-connectivity-option",
+                "label": "Which Cloud Connectivity Option is Right for Me?"
+              },
+              {
+                "type": "doc",
+                "id": "console/cloud-connectivity/internet-delivery",
+                "label": "Internet Delivery (Single Region)"
+              },
+              {
+                "type": "doc",
+                "id": "console/cloud-connectivity/aws-private-link",
+                "label": "AWS Private Link (Single Region)"
+              },
+              {
+                "type": "doc",
+                "id": "console/cloud-connectivity/ipsec-vpn-tunnels",
+                "label": "IPSEC VPN Tunnels (Single Region)"
+              },
+              {
+                "type": "doc",
+                "id": "console/cloud-connectivity/aws-direct-connect",
+                "label": "AWS Direct Connect (Single Region)"
+              },
+              {
+                "type": "doc",
+                "id": "console/cloud-connectivity/aws-direct-connect-multi-region",
+                "label": "AWS Direct Connect (Multi-Region)"
+              }
+            ]
+          },
+          {
+            "type": "doc",
+            "id": "console/cloud-connectivity/cloud-connectivity-faq",
+            "label": "Frequently Asked Questions"
+          }
+        ]
+      },
+      {
+        "type": "category",
+        "label": "Maintenance",
+        "items": [
+          {
+            "type": "doc",
+            "id": "console/maintenance",
+            "label": "Scheduled Maintenance"
+          }
+        ]
+      }
+    ]
+  },
+  {
+    "type": "category",
+    "label": "Enterprise",
+    "items": [
+      {
+        "type": "doc",
+        "id": "console/netbox-enterprise/nbe-overview",
+        "label": "Overview"
+      },
+      {
+        "type": "category",
+        "label": "NetBox Enterprise Installer",
+        "items": [
+          {
+            "type": "doc",
+            "id": "console/netbox-enterprise/nbe-ec-requirements",
+            "label": "Requirements"
+          },
+          {
+            "type": "category",
+            "label": "Distribution Specific Requirements",
+            "items": [
+              {
+                "type": "doc",
+                "id": "console/netbox-enterprise/nbe-ec-requirements-rhel",
+                "label": "RHEL"
+              }
+            ]
+          },
+          {
+            "type": "doc",
+            "id": "console/netbox-enterprise/nbe-ec-linux-changes",
+            "label": "Linux System Changes"
+          },
+          {
+            "type": "doc",
+            "id": "console/netbox-enterprise/nbe-ec-installation",
+            "label": "Installation"
+          },
+          {
+            "type": "doc",
+            "id": "console/netbox-enterprise/nbe-migrating",
+            "label": "Migrating"
+          },
+          {
+            "type": "doc",
+            "id": "console/netbox-enterprise/nbe-ec-built-in-plugins",
+            "label": "Built-in Plugin Installation"
+          },
+          {
+            "type": "doc",
+            "id": "console/netbox-enterprise/nbe-ec-custom-plugins",
+            "label": "Custom Plugin Installation"
+          }
+        ]
+      },
+      {
+        "type": "category",
+        "label": "Single Sign-On (SSO)",
+        "items": [
+          {
+            "type": "category",
+            "label": "Entra ID",
+            "items": [
+              {
+                "type": "doc",
+                "id": "console/netbox-enterprise/nbe-azure-sso",
+                "label": "Microsoft Entra ID SSO"
+              },
+              {
+                "type": "doc",
+                "id": "console/netbox-enterprise/nbe-azure-group-mapping",
+                "label": "Entra ID Group Mapping"
+              }
+            ]
+          },
+          {
+            "type": "category",
+            "label": "SAML",
+            "items": [
+              {
+                "type": "doc",
+                "id": "console/netbox-enterprise/nbe-saml",
+                "label": "SAML SSO Setup"
+              },
+              {
+                "type": "doc",
+                "id": "console/netbox-enterprise/nbe-saml-group-map",
+                "label": "SAML Group Mapping"
+              }
+            ]
+          },
+          {
+            "type": "doc",
+            "id": "console/netbox-enterprise/nbe-ldap",
+            "label": "LDAP"
+          }
+        ]
+      },
+      {
+        "type": "category",
+        "label": "Administration",
+        "items": [
+          {
+            "type": "doc",
+            "id": "console/netbox-enterprise/nbe-tls-ingress",
+            "label": "TLS and Ingress"
+          },
+          {
+            "type": "doc",
+            "id": "console/netbox-enterprise/nbe-backups",
+            "label": "Backups"
+          },
+          {
+            "type": "doc",
+            "id": "console/netbox-enterprise/nbe-troubleshooting",
+            "label": "Advanced Tools and Troubleshooting"
+          }
+        ]
+      },
+      {
+        "type": "doc",
+        "id": "console/netbox-enterprise/nbe-release-notes",
+        "label": "Release Notes"
+      }
+    ]
+  },
+  {
+    "type": "category",
+    "label": "Discovery & Assurance",
+    "items": [
+      {
+        "type": "category",
+        "label": "NetBox Discovery",
+        "items": [
+          {
+            "type": "doc",
+            "id": "console/netbox-discovery/index",
+            "label": "Overview"
+          },
+          {
+            "type": "category",
+            "label": "Discovery Agent",
+            "items": [
+              {
+                "type": "doc",
+                "id": "console/netbox-discovery/agent/index",
+                "label": "Overview"
+              },
+              {
+                "type": "doc",
+                "id": "console/netbox-discovery/agent/get-started",
+                "label": "Getting Started"
+              },
+              {
+                "type": "doc",
+                "id": "console/netbox-discovery/agent/configuration-file",
+                "label": "Configuration Format"
+              },
+              {
+                "type": "doc",
+                "id": "console/netbox-discovery/agent/network_discovery",
+                "label": "Network Discovery"
+              },
+              {
+                "type": "doc",
+                "id": "console/netbox-discovery/agent/device_discovery",
+                "label": "Device Discovery"
+              },
+              {
+                "type": "doc",
+                "id": "console/netbox-discovery/agent/config_samples",
+                "label": "Configuration Samples"
+              }
+            ]
+          }
+        ]
+      },
+      {
+        "type": "category",
+        "label": "NetBox Assurance",
+        "items": [
+          {
+            "type": "doc",
+            "id": "console/netbox-assurance/index",
+            "label": "Overview"
+          },
+          {
+            "type": "doc",
+            "id": "console/netbox-assurance/using-the-ui",
+            "label": "Using the UI"
+          }
+        ]
+      }
+    ]
+  },
+  {
+    "type": "category",
+    "label": "Integrations",
+    "items": [
+      {
+        "type": "doc",
+        "id": "console/netbox-integrations/netbox-ansible-collection",
+        "label": "NetBox Ansible Collection"
+      },
+      {
+        "type": "doc",
+        "id": "console/netbox-integrations/pyats",
+        "label": "pyATS"
+      },
+      {
+        "type": "category",
+        "label": "ServiceNow",
+        "items": [
+          {
+            "type": "doc",
+            "id": "console/netbox-integrations/servicenow/index",
+            "label": "Overview"
+          },
+          {
+            "type": "doc",
+            "id": "console/netbox-integrations/servicenow/snow-installation",
+            "label": "Installation"
+          },
+          {
+            "type": "doc",
+            "id": "console/netbox-integrations/servicenow/snow-technical-info",
+            "label": "Technical Info"
+          },
+          {
+            "type": "doc",
+            "id": "console/netbox-integrations/servicenow/snow-faq",
+            "label": "FAQ and Troubleshooting"
+          },
+          {
+            "type": "doc",
+            "id": "console/netbox-integrations/servicenow/snow-upgrading",
+            "label": "Upgrading"
+          }
+        ]
+      }
+    ]
+  },
+  {
+    "type": "category",
+    "label": "SDKs",
+    "items": [
+      {
+        "type": "doc",
+        "id": "console/sdks/pynetbox",
+        "label": "Pynetbox"
+      }
+    ]
+  },
+  {
+    "type": "category",
+    "label": "Extensions",
+    "items": [
+      {
+        "type": "category",
+        "label": "Branching",
+        "items": [
+          {
+            "type": "doc",
+            "id": "console/netbox-extensions/branching/index",
+            "label": "Overview"
+          },
+          {
+            "type": "doc",
+            "id": "console/netbox-extensions/branching/configuration",
+            "label": "Configuration"
+          },
+          {
+            "type": "category",
+            "label": "Using Branches",
+            "items": [
+              {
+                "type": "doc",
+                "id": "console/netbox-extensions/branching/using-branches/creating-a-branch",
+                "label": "Creating a Branch"
+              },
+              {
+                "type": "doc",
+                "id": "console/netbox-extensions/branching/using-branches/syncing-merging",
+                "label": "Syncing & Merging Changes"
+              },
+              {
+                "type": "doc",
+                "id": "console/netbox-extensions/branching/using-branches/reverting-a-branch",
+                "label": "Reverting a Branch"
+              },
+              {
+                "type": "doc",
+                "id": "console/netbox-extensions/branching/using-branches/api",
+                "label": "Interact with Branches via API"
+              }
+            ]
+          },
+          {
+            "type": "category",
+            "label": "Models",
+            "items": [
+              {
+                "type": "doc",
+                "id": "console/netbox-extensions/branching/models/branch",
+                "label": "Branches"
+              },
+              {
+                "type": "doc",
+                "id": "console/netbox-extensions/branching/models/branchevent",
+                "label": "Branch Events"
+              },
+              {
+                "type": "doc",
+                "id": "console/netbox-extensions/branching/models/changediff",
+                "label": "Change Diffs"
+              },
+              {
+                "type": "doc",
+                "id": "console/netbox-extensions/branching/models/objectchange",
+                "label": "Object Changes"
+              }
+            ]
+          },
+          {
+            "type": "doc",
+            "id": "console/netbox-extensions/branching/changelog",
+            "label": "Changelog"
+          }
+        ]
+      },
+      {
+        "type": "category",
+        "label": "Change Management",
+        "items": [
+          {
+            "type": "doc",
+            "id": "console/netbox-extensions/changes/index",
+            "label": "Overview"
+          },
+          {
+            "type": "doc",
+            "id": "console/netbox-extensions/changes/configuration",
+            "label": "Configuration"
+          },
+          {
+            "type": "category",
+            "label": "Models",
+            "items": [
+              {
+                "type": "doc",
+                "id": "console/netbox-extensions/changes/models/changerequest",
+                "label": "Change Request"
+              },
+              {
+                "type": "doc",
+                "id": "console/netbox-extensions/changes/models/comment",
+                "label": "Comment"
+              },
+              {
+                "type": "doc",
+                "id": "console/netbox-extensions/changes/models/commentreply",
+                "label": "Comment Reply"
+              },
+              {
+                "type": "doc",
+                "id": "console/netbox-extensions/changes/models/policy",
+                "label": "Policy"
+              },
+              {
+                "type": "doc",
+                "id": "console/netbox-extensions/changes/models/policyrule",
+                "label": "Policy Rule"
+              },
+              {
+                "type": "doc",
+                "id": "console/netbox-extensions/changes/models/review",
+                "label": "Review"
+              }
+            ]
+          },
+          {
+            "type": "doc",
+            "id": "console/netbox-extensions/changes/changelog",
+            "label": "Changelog"
+          }
+        ]
+      },
+      {
+        "type": "category",
+        "label": "Diode",
+        "items": [
+          {
+            "type": "doc",
+            "id": "console/netbox-extensions/diode/index",
+            "label": "Overview"
+          },
+          {
+            "type": "doc",
+            "id": "console/netbox-extensions/diode/diode-get-started",
+            "label": "Get Started"
+          }
+        ]
+      },
+      {
+        "type": "doc",
+        "id": "console/product_feature_lifecycle",
+        "label": "Product and Feature Lifecycle"
+      }
+    ]
+  }
+]
\ No newline at end of file
diff --git a/sidebars/netbox.json b/sidebars/netbox.json
new file mode 100644
index 00000000..04bd11a7
--- /dev/null
+++ b/sidebars/netbox.json
@@ -0,0 +1,1380 @@
+[
+  {
+    "type": "doc",
+    "id": "netbox/index",
+    "label": "Home"
+  },
+  {
+    "type": "doc",
+    "id": "netbox/introduction",
+    "label": "Introduction"
+  },
+  {
+    "type": "category",
+    "label": "Features",
+    "items": [
+      {
+        "type": "doc",
+        "id": "netbox/features/facilities",
+        "label": "Facilities"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/features/devices-cabling",
+        "label": "Devices & Cabling"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/features/power-tracking",
+        "label": "Power Tracking"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/features/ipam",
+        "label": "IPAM"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/features/vlan-management",
+        "label": "VLAN Management"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/features/l2vpn-overlay",
+        "label": "L2VPN & Overlay"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/features/circuits",
+        "label": "Circuits"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/features/wireless",
+        "label": "Wireless"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/features/virtualization",
+        "label": "Virtualization"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/features/vpn-tunnels",
+        "label": "VPN Tunnels"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/features/tenancy",
+        "label": "Tenancy"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/features/contacts",
+        "label": "Contacts"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/features/search",
+        "label": "Search"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/features/context-data",
+        "label": "Context Data"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/features/configuration-rendering",
+        "label": "Configuration Rendering"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/features/synchronized-data",
+        "label": "Synchronized Data"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/features/change-logging",
+        "label": "Change Logging"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/features/journaling",
+        "label": "Journaling"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/features/event-rules",
+        "label": "Event Rules"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/features/notifications",
+        "label": "Notifications"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/features/background-jobs",
+        "label": "Background Jobs"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/features/authentication-permissions",
+        "label": "Auth & Permissions"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/features/api-integration",
+        "label": "API & Integration"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/features/customization",
+        "label": "Customization"
+      }
+    ]
+  },
+  {
+    "type": "category",
+    "label": "Installation & Upgrade",
+    "items": [
+      {
+        "type": "doc",
+        "id": "netbox/installation/index",
+        "label": "Installing NetBox"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/installation/postgresql",
+        "label": "1. PostgreSQL"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/installation/redis",
+        "label": "2. Redis"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/installation/netbox",
+        "label": "3. NetBox"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/installation/4a-gunicorn",
+        "label": "4a. Gunicorn"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/installation/4b-uwsgi",
+        "label": "4b. uWSGI"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/installation/http-server",
+        "label": "5. HTTP Server"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/installation/ldap",
+        "label": "6. LDAP (Optional)"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/installation/upgrading",
+        "label": "Upgrading NetBox"
+      }
+    ]
+  },
+  {
+    "type": "category",
+    "label": "Getting Started",
+    "items": [
+      {
+        "type": "doc",
+        "id": "netbox/getting-started/planning",
+        "label": "Planning"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/getting-started/populating-data",
+        "label": "Populating Data"
+      }
+    ]
+  },
+  {
+    "type": "category",
+    "label": "Configuration",
+    "items": [
+      {
+        "type": "doc",
+        "id": "netbox/configuration/index",
+        "label": "Configuring NetBox"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/configuration/required-parameters",
+        "label": "Required Parameters"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/configuration/system",
+        "label": "System"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/configuration/security",
+        "label": "Security"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/configuration/graphql-api",
+        "label": "GraphQL API"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/configuration/remote-authentication",
+        "label": "Remote Authentication"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/configuration/data-validation",
+        "label": "Data & Validation"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/configuration/default-values",
+        "label": "Default Values"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/configuration/error-reporting",
+        "label": "Error Reporting"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/configuration/plugins",
+        "label": "Plugins"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/configuration/miscellaneous",
+        "label": "Miscellaneous"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/configuration/development",
+        "label": "Development"
+      }
+    ]
+  },
+  {
+    "type": "category",
+    "label": "Customization",
+    "items": [
+      {
+        "type": "doc",
+        "id": "netbox/customization/custom-fields",
+        "label": "Custom Fields"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/customization/custom-links",
+        "label": "Custom Links"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/customization/custom-validation",
+        "label": "Custom Validation"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/customization/export-templates",
+        "label": "Export Templates"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/customization/reports",
+        "label": "Reports"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/customization/custom-scripts",
+        "label": "Custom Scripts"
+      }
+    ]
+  },
+  {
+    "type": "category",
+    "label": "Integrations",
+    "items": [
+      {
+        "type": "doc",
+        "id": "netbox/integrations/rest-api",
+        "label": "REST API"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/integrations/graphql-api",
+        "label": "GraphQL API"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/integrations/webhooks",
+        "label": "Webhooks"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/integrations/synchronized-data",
+        "label": "Synchronized Data"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/integrations/prometheus-metrics",
+        "label": "Prometheus Metrics"
+      }
+    ]
+  },
+  {
+    "type": "category",
+    "label": "Plugins",
+    "items": [
+      {
+        "type": "doc",
+        "id": "netbox/plugins/index",
+        "label": "About Plugins"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/plugins/installation",
+        "label": "Installing a Plugin"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/plugins/removal",
+        "label": "Removing a Plugin"
+      },
+      {
+        "type": "category",
+        "label": "Developing Plugins",
+        "items": [
+          {
+            "type": "doc",
+            "id": "netbox/plugins/development/index",
+            "label": "Getting Started"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/plugins/development/models",
+            "label": "Models"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/plugins/development/views",
+            "label": "Views"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/plugins/development/navigation",
+            "label": "Navigation"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/plugins/development/templates",
+            "label": "Templates"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/plugins/development/tables",
+            "label": "Tables"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/plugins/development/forms",
+            "label": "Forms"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/plugins/development/filtersets",
+            "label": "Filters & Filter Sets"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/plugins/development/search",
+            "label": "Search"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/plugins/development/event-types",
+            "label": "Event Types"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/plugins/development/data-backends",
+            "label": "Data Backends"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/plugins/development/rest-api",
+            "label": "REST API"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/plugins/development/graphql-api",
+            "label": "GraphQL API"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/plugins/development/background-jobs",
+            "label": "Background Jobs"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/plugins/development/dashboard-widgets",
+            "label": "Dashboard Widgets"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/plugins/development/exceptions",
+            "label": "Exceptions"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/plugins/development/migration-v4",
+            "label": "Migrating to v4.0"
+          }
+        ]
+      }
+    ]
+  },
+  {
+    "type": "category",
+    "label": "Administration",
+    "items": [
+      {
+        "type": "category",
+        "label": "Authentication",
+        "items": [
+          {
+            "type": "doc",
+            "id": "netbox/administration/authentication/overview",
+            "label": "Overview"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/administration/authentication/google",
+            "label": "Google"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/administration/authentication/microsoft-entra-id",
+            "label": "Microsoft Entra ID"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/administration/authentication/okta",
+            "label": "Okta"
+          }
+        ]
+      },
+      {
+        "type": "doc",
+        "id": "netbox/administration/permissions",
+        "label": "Permissions"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/administration/error-reporting",
+        "label": "Error Reporting"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/administration/housekeeping",
+        "label": "Housekeeping"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/administration/replicating-netbox",
+        "label": "Replicating NetBox"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/administration/netbox-shell",
+        "label": "NetBox Shell"
+      }
+    ]
+  },
+  {
+    "type": "category",
+    "label": "Data Model",
+    "items": [
+      {
+        "type": "category",
+        "label": "Circuits",
+        "items": [
+          {
+            "type": "doc",
+            "id": "netbox/models/circuits/circuit",
+            "label": "Circuit"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/circuits/circuitgroup",
+            "label": "CircuitGroup"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/circuits/circuitgroupassignment",
+            "label": "CircuitGroupAssignment"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/circuits/circuittermination",
+            "label": "Circuit Termination"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/circuits/circuittype",
+            "label": "Circuit Type"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/circuits/provider",
+            "label": "Provider"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/circuits/provideraccount",
+            "label": "Provider Account"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/circuits/providernetwork",
+            "label": "Provider Network"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/circuits/virtualcircuit",
+            "label": "Virtual Circuit"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/circuits/virtualcircuittermination",
+            "label": "Virtual Circuit Termination"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/circuits/virtualcircuittype",
+            "label": "Virtual Circuit Type"
+          }
+        ]
+      },
+      {
+        "type": "category",
+        "label": "Core",
+        "items": [
+          {
+            "type": "doc",
+            "id": "netbox/models/core/datafile",
+            "label": "DataFile"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/core/datasource",
+            "label": "DataSource"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/core/job",
+            "label": "Job"
+          }
+        ]
+      },
+      {
+        "type": "category",
+        "label": "DCIM",
+        "items": [
+          {
+            "type": "doc",
+            "id": "netbox/models/dcim/cable",
+            "label": "Cable"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/dcim/consoleport",
+            "label": "ConsolePort"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/dcim/consoleporttemplate",
+            "label": "ConsolePortTemplate"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/dcim/consoleserverport",
+            "label": "ConsoleServerPort"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/dcim/consoleserverporttemplate",
+            "label": "ConsoleServerPortTemplate"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/dcim/device",
+            "label": "Device"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/dcim/devicebay",
+            "label": "DeviceBay"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/dcim/devicebaytemplate",
+            "label": "DeviceBayTemplate"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/dcim/devicerole",
+            "label": "DeviceRole"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/dcim/devicetype",
+            "label": "DeviceType"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/dcim/frontport",
+            "label": "FrontPort"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/dcim/frontporttemplate",
+            "label": "FrontPortTemplate"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/dcim/interface",
+            "label": "Interface"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/dcim/interfacetemplate",
+            "label": "InterfaceTemplate"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/dcim/inventoryitem",
+            "label": "InventoryItem"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/dcim/inventoryitemrole",
+            "label": "InventoryItemRole"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/dcim/inventoryitemtemplate",
+            "label": "InventoryItemTemplate"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/dcim/location",
+            "label": "Location"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/dcim/macaddress",
+            "label": "MACAddress"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/dcim/manufacturer",
+            "label": "Manufacturer"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/dcim/module",
+            "label": "Module"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/dcim/modulebay",
+            "label": "ModuleBay"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/dcim/modulebaytemplate",
+            "label": "ModuleBayTemplate"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/dcim/moduletype",
+            "label": "ModuleType"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/dcim/moduletypeprofile",
+            "label": "ModuleTypeProfile"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/dcim/platform",
+            "label": "Platform"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/dcim/powerfeed",
+            "label": "PowerFeed"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/dcim/poweroutlet",
+            "label": "PowerOutlet"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/dcim/poweroutlettemplate",
+            "label": "PowerOutletTemplate"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/dcim/powerpanel",
+            "label": "PowerPanel"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/dcim/powerport",
+            "label": "PowerPort"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/dcim/powerporttemplate",
+            "label": "PowerPortTemplate"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/dcim/rack",
+            "label": "Rack"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/dcim/rackreservation",
+            "label": "RackReservation"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/dcim/rackrole",
+            "label": "RackRole"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/dcim/racktype",
+            "label": "RackType"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/dcim/rearport",
+            "label": "RearPort"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/dcim/rearporttemplate",
+            "label": "RearPortTemplate"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/dcim/region",
+            "label": "Region"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/dcim/site",
+            "label": "Site"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/dcim/sitegroup",
+            "label": "SiteGroup"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/dcim/virtualchassis",
+            "label": "VirtualChassis"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/dcim/virtualdevicecontext",
+            "label": "VirtualDeviceContext"
+          }
+        ]
+      },
+      {
+        "type": "category",
+        "label": "Extras",
+        "items": [
+          {
+            "type": "doc",
+            "id": "netbox/models/extras/bookmark",
+            "label": "Bookmark"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/extras/configcontext",
+            "label": "ConfigContext"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/extras/configtemplate",
+            "label": "ConfigTemplate"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/extras/customfield",
+            "label": "CustomField"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/extras/customfieldchoiceset",
+            "label": "CustomFieldChoiceSet"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/extras/customlink",
+            "label": "CustomLink"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/extras/eventrule",
+            "label": "EventRule"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/extras/exporttemplate",
+            "label": "ExportTemplate"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/extras/imageattachment",
+            "label": "ImageAttachment"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/extras/journalentry",
+            "label": "JournalEntry"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/extras/notification",
+            "label": "Notification"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/extras/notificationgroup",
+            "label": "NotificationGroup"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/extras/savedfilter",
+            "label": "SavedFilter"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/extras/subscription",
+            "label": "Subscription"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/extras/tableconfig",
+            "label": "TableConfig"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/extras/tag",
+            "label": "Tag"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/extras/webhook",
+            "label": "Webhook"
+          }
+        ]
+      },
+      {
+        "type": "category",
+        "label": "IPAM",
+        "items": [
+          {
+            "type": "doc",
+            "id": "netbox/models/ipam/asn",
+            "label": "ASN"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/ipam/asnrange",
+            "label": "ASNRange"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/ipam/aggregate",
+            "label": "Aggregate"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/ipam/fhrpgroup",
+            "label": "FHRPGroup"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/ipam/fhrpgroupassignment",
+            "label": "FHRPGroupAssignment"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/ipam/ipaddress",
+            "label": "IPAddress"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/ipam/iprange",
+            "label": "IPRange"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/ipam/prefix",
+            "label": "Prefix"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/ipam/rir",
+            "label": "RIR"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/ipam/role",
+            "label": "Role"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/ipam/routetarget",
+            "label": "RouteTarget"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/ipam/service",
+            "label": "Service"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/ipam/servicetemplate",
+            "label": "ServiceTemplate"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/ipam/vlan",
+            "label": "VLAN"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/ipam/vlangroup",
+            "label": "VLANGroup"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/ipam/vlantranslationpolicy",
+            "label": "VLANTranslationPolicy"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/ipam/vlantranslationrule",
+            "label": "VLANTranslationRule"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/ipam/vrf",
+            "label": "VRF"
+          }
+        ]
+      },
+      {
+        "type": "category",
+        "label": "Tenancy",
+        "items": [
+          {
+            "type": "doc",
+            "id": "netbox/models/tenancy/contact",
+            "label": "Contact"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/tenancy/contactgroup",
+            "label": "ContactGroup"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/tenancy/contactrole",
+            "label": "ContactRole"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/tenancy/tenant",
+            "label": "Tenant"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/tenancy/tenantgroup",
+            "label": "TenantGroup"
+          }
+        ]
+      },
+      {
+        "type": "category",
+        "label": "Virtualization",
+        "items": [
+          {
+            "type": "doc",
+            "id": "netbox/models/virtualization/cluster",
+            "label": "Cluster"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/virtualization/clustergroup",
+            "label": "ClusterGroup"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/virtualization/clustertype",
+            "label": "ClusterType"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/virtualization/vminterface",
+            "label": "VMInterface"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/virtualization/virtualdisk",
+            "label": "VirtualDisk"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/virtualization/virtualmachine",
+            "label": "VirtualMachine"
+          }
+        ]
+      },
+      {
+        "type": "category",
+        "label": "VPN",
+        "items": [
+          {
+            "type": "doc",
+            "id": "netbox/models/vpn/ikepolicy",
+            "label": "IKEPolicy"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/vpn/ikeproposal",
+            "label": "IKEProposal"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/vpn/ipsecpolicy",
+            "label": "IPSecPolicy"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/vpn/ipsecprofile",
+            "label": "IPSecProfile"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/vpn/ipsecproposal",
+            "label": "IPSecProposal"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/vpn/l2vpn",
+            "label": "L2VPN"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/vpn/l2vpntermination",
+            "label": "L2VPNTermination"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/vpn/tunnel",
+            "label": "Tunnel"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/vpn/tunnelgroup",
+            "label": "TunnelGroup"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/vpn/tunneltermination",
+            "label": "TunnelTermination"
+          }
+        ]
+      },
+      {
+        "type": "category",
+        "label": "Wireless",
+        "items": [
+          {
+            "type": "doc",
+            "id": "netbox/models/wireless/wirelesslan",
+            "label": "WirelessLAN"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/wireless/wirelesslangroup",
+            "label": "WirelessLANGroup"
+          },
+          {
+            "type": "doc",
+            "id": "netbox/models/wireless/wirelesslink",
+            "label": "WirelessLink"
+          }
+        ]
+      }
+    ]
+  },
+  {
+    "type": "category",
+    "label": "Reference",
+    "items": [
+      {
+        "type": "doc",
+        "id": "netbox/reference/filtering",
+        "label": "Filtering"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/reference/conditions",
+        "label": "Conditions"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/reference/markdown",
+        "label": "Markdown"
+      }
+    ]
+  },
+  {
+    "type": "category",
+    "label": "Development",
+    "items": [
+      {
+        "type": "doc",
+        "id": "netbox/development/index",
+        "label": "Introduction"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/development/getting-started",
+        "label": "Getting Started"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/development/style-guide",
+        "label": "Style Guide"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/development/models",
+        "label": "Models"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/development/adding-models",
+        "label": "Adding Models"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/development/extending-models",
+        "label": "Extending Models"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/development/signals",
+        "label": "Signals"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/development/search",
+        "label": "Search"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/development/application-registry",
+        "label": "Application Registry"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/development/user-preferences",
+        "label": "User Preferences"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/development/web-ui",
+        "label": "Web UI"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/development/internationalization",
+        "label": "Internationalization"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/development/translations",
+        "label": "Translations"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/development/release-checklist",
+        "label": "Release Checklist"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/development/git-cheat-sheet",
+        "label": "git Cheat Sheet"
+      }
+    ]
+  },
+  {
+    "type": "category",
+    "label": "Release Notes",
+    "items": [
+      {
+        "type": "doc",
+        "id": "netbox/release-notes/index",
+        "label": "Summary"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/release-notes/version-4.3",
+        "label": "Version 4.3"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/release-notes/version-4.2",
+        "label": "Version 4.2"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/release-notes/version-4.1",
+        "label": "Version 4.1"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/release-notes/version-4.0",
+        "label": "Version 4.0"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/release-notes/version-3.7",
+        "label": "Version 3.7"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/release-notes/version-3.6",
+        "label": "Version 3.6"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/release-notes/version-3.5",
+        "label": "Version 3.5"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/release-notes/version-3.4",
+        "label": "Version 3.4"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/release-notes/version-3.3",
+        "label": "Version 3.3"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/release-notes/version-3.2",
+        "label": "Version 3.2"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/release-notes/version-3.1",
+        "label": "Version 3.1"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/release-notes/version-3.0",
+        "label": "Version 3.0"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/release-notes/version-2.11",
+        "label": "Version 2.11"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/release-notes/version-2.10",
+        "label": "Version 2.10"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/release-notes/version-2.9",
+        "label": "Version 2.9"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/release-notes/version-2.8",
+        "label": "Version 2.8"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/release-notes/version-2.7",
+        "label": "Version 2.7"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/release-notes/version-2.6",
+        "label": "Version 2.6"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/release-notes/version-2.5",
+        "label": "Version 2.5"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/release-notes/version-2.4",
+        "label": "Version 2.4"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/release-notes/version-2.3",
+        "label": "Version 2.3"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/release-notes/version-2.2",
+        "label": "Version 2.2"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/release-notes/version-2.1",
+        "label": "Version 2.1"
+      },
+      {
+        "type": "doc",
+        "id": "netbox/release-notes/version-2.0",
+        "label": "Version 2.0"
+      }
+    ]
+  }
+]
\ No newline at end of file
diff --git a/src/components/elements/buttons/Button.tsx b/src/components/elements/buttons/Button.tsx
new file mode 100644
index 00000000..215ea60f
--- /dev/null
+++ b/src/components/elements/buttons/Button.tsx
@@ -0,0 +1,141 @@
+import clsx from "clsx";
+import { motion, AnimatePresence } from "motion/react";
+import React, { useState, useMemo } from "react";
+
+type ButtonProps = {
+	link?: {
+		title: string;
+		url?: string;
+	};
+	button?: {
+		background_color?: "black" | "white" | "grey-13" | "grey-11" | "white/5" | "grey-1" | "grey-2";
+		type?: "solid" | "outline";
+		size?: "small" | "medium";
+	};
+	className?: string;
+	children?: React.ReactNode;
+};
+
+const VARIANT_TYPES = ["linkTextVariants", "linkTextDuplicateVariants"];
+
+export function Button({ link, button, className = "", children, ...other }: ButtonProps) {
+	const [isHovered, setIsHovered] = useState(false);
+
+	const buttonClasses = useMemo(() => {
+		const backgroundColor = button?.background_color || "black";
+		const buttonType = button?.type || "solid";
+		const buttonSize = button?.size || "medium";
+
+		return clsx(
+			"relative overflow-hidden inline-block select-none appearance-none rounded text-center font-medium !leading-none transition-colors duration-200",
+			className,
+			backgroundColor === "black" && "bg-black text-white",
+			backgroundColor === "white" && "bg-white text-black",
+			backgroundColor === "grey-13" && "bg-grey-13 text-white",
+			backgroundColor === "grey-11" && "bg-grey-11 text-white",
+			backgroundColor === "white/5" && "bg-white/5 text-white hover:bg-white/10",
+			backgroundColor === "grey-1" && "bg-grey-1 text-grey-16",
+			backgroundColor === "grey-2" && "bg-grey-2 text-grey-16",
+			buttonSize === "small" && "text-13 px-3 py-2 sm:py-[0.5625rem]",
+			buttonSize === "medium" && "text-15 px-3.5 sm:px-[1.125rem] py-2.5 sm:py-3"
+		);
+	}, [button?.background_color, button?.type, button?.size, className]);
+
+	const { linkTextVariants, linkTextDuplicateVariants } = useMemo(() => {
+		const transition = {
+			duration: 0.3,
+			ease: [0.33, 1, 0.68, 1],
+		};
+
+		return {
+			linkTextVariants: {
+				initial: {
+					y: 0,
+					opacity: 1,
+					transition,
+				},
+				hover: {
+					y: "calc(-100% - 6px)",
+					opacity: 0,
+					transition,
+				},
+			},
+			linkTextDuplicateVariants: {
+				initial: {
+					y: "calc(100% + 6px)",
+					opacity: 0,
+					transition,
+				},
+				hover: {
+					y: 0,
+					opacity: 1,
+					transition,
+				},
+			},
+		};
+	}, []);
+
+	if (!link?.title) return null;
+
+	const buttonSize = button?.size || "medium";
+
+	return (
+		<motion.div
+			initial="initial"
+			animate={isHovered ? "hover" : "initial"}
+			className={buttonClasses}
+			{...other}
+			onHoverStart={() => setIsHovered(true)}
+			onHoverEnd={() => setIsHovered(false)}
+		>
+			<div className="relative grid">
+				{VARIANT_TYPES.map((variantType, i) => {
+					const ariaHidden = i === 1 ? "true" : "false";
+					const role = i === 1 ? "presentation" : "none";
+
+					return (
+						<div key={i} className="col-start-1 row-start-1 flex items-center justify-center" aria-hidden={ariaHidden} role={role}>
+							<motion.span variants={variantType === "linkTextVariants" ? linkTextVariants : linkTextDuplicateVariants}>{link?.title}</motion.span>
+						</div>
+					);
+				})}
+
+				<AnimatePresence>
+					{isHovered && buttonSize !== "small" && (
+						<motion.div
+							className="absolute inset-x-0 top-full h-full w-full rounded-[100%] bg-teal blur-xl"
+							initial={{ opacity: 0, scale: 0.2 }}
+							animate={{ opacity: 1, scale: 1 }}
+							exit={{ opacity: 0, scale: 0.2, transition: { duration: 0.2 } }}
+							transition={{ ease: [0.33, 1, 0.68, 1], duration: 0.5 }}
+						/>
+					)}
+				</AnimatePresence>
+			</div>
+		</motion.div>
+	);
+}
+
+type TextLinkProps = {
+	link?: {
+		title: string;
+		url: string;
+	};
+	className?: string;
+	children?: React.ReactNode;
+	underlineColour?: "black" | "white";
+};
+
+export function TextLink({ className = "", link, children, underlineColour = "black" }: TextLinkProps) {
+	return (
+		<div className={`text-16px group inline-flex cursor-pointer select-none items-center leading-tight ${className}`}>
+			{(link?.title || children) && (
+				<div className="group-hover:text-orange inline-block font-bold text-inherit">
+					{link?.title && <span dangerouslySetInnerHTML={{ __html: link?.title }} />}
+					{!link?.title && children && children}
+					<div className={`group-hover:bg-orange mt-1 h-[2px] w-full rounded bg-black bg-${underlineColour} transition-colors duration-300 ease-in-out`} />
+				</div>
+			)}
+		</div>
+	);
+}
diff --git a/src/components/global/FloatingSubNav.tsx b/src/components/global/FloatingSubNav.tsx
new file mode 100644
index 00000000..24976e39
--- /dev/null
+++ b/src/components/global/FloatingSubNav.tsx
@@ -0,0 +1,124 @@
+import useIsBelowBreakpoint from "../../hooks/useIsBelowBreakpoint";
+import useIsScrolled from "../../hooks/useIsScrolled";
+import { useLocation } from '@docusaurus/router';
+import clsx from "clsx";
+import React, { useState, useEffect } from "react";
+
+export type FloatingSubNavProps = {
+	nav_items?: {
+		link: any;
+	}[];
+	theme?: any;
+};
+
+export default function FloatingSubNav({ nav_items = [], theme = "black" }: FloatingSubNavProps) {
+	const isScrolled = useIsScrolled(50, 40);
+	const isMobile = useIsBelowBreakpoint(1024);
+	const location = useLocation();
+	const [activeSection, setActiveSection] = useState<string | null>(null);
+
+	// Define constants for better semantics
+	const VIEWPORT_TRIGGER_THRESHOLD = 0.3; // The top 30% of the viewport
+
+	// Function to check if an element is in viewport with better comments
+	const isInViewport = (element: HTMLElement | null) => {
+		if (!element) return false;
+
+		const rect = element.getBoundingClientRect();
+		const windowHeight = window.innerHeight || document.documentElement.clientHeight;
+
+		return (
+			rect.top <= windowHeight * VIEWPORT_TRIGGER_THRESHOLD && // Element is in the top portion of viewport
+			rect.bottom >= 0 // Element hasn't scrolled past the top
+		);
+	};
+
+	// useEffect with proper dependency management
+	useEffect(() => {
+		// Create the section lookup only once when nav_items changes
+		const sections = nav_items
+			.map((item) => {
+				if (!item.link?.url) return null;
+				const hash = item.link.url.split("#")[1];
+				return hash ? { hash } : null;
+			})
+			.filter(Boolean) as { hash: string }[];
+
+		// Function to update active section based on scroll position
+		const updateActiveSection = () => {
+			// Find the first section that is in viewport
+			const visibleSection = sections.find(({ hash }) => isInViewport(document.getElementById(hash)));
+
+			if (visibleSection) {
+				setActiveSection(visibleSection.hash);
+			} else {
+				// Reset active section if no visible sections
+				setActiveSection(null);
+			}
+		};
+
+		// Initial check
+		updateActiveSection();
+
+		// Add scroll event listener
+		window.addEventListener("scroll", updateActiveSection);
+
+		// Clean up
+		return () => {
+			window.removeEventListener("scroll", updateActiveSection);
+		};
+	}, [nav_items, setActiveSection]); // Include all dependencies
+
+	if (nav_items.length === 0 || isMobile) return null;
+
+	const themeMap = {
+		black: {
+			backgroundColor: "bg-grey-14",
+			textColor: "text-white",
+			spacerColor: "bg-white/[0.06]",
+			shadow: isScrolled && "shadow-[0px_4px_32px_0px_rgba(0,242,212,0.60)]",
+		},
+		white: {
+			backgroundColor: "bg-grey-1 border border-grey-2",
+			textColor: "text-grey-16",
+			spacerColor: "bg-grey-2",
+			shadow: isScrolled ? "shadow-[0px_4px_32px_0px_rgba(0,242,212,0.60)]" : "shadow-[0px_4px_25px_0px_rgba(0,0,0,0.05)]",
+		},
+	};
+	return (
+		<div className={clsx("fixed inset-x-0 top-[var(--header-height)] z-[99] flex justify-center pt-[1.125rem]", themeMap[theme].textColor)}>
+			<div className="container">
+				<div
+					className={clsx(
+						"flex items-center gap-x-[1.125rem] rounded-[0.1875rem] px-3.5 py-2.5 transition-shadow duration-200",
+						themeMap[theme].shadow,
+						themeMap[theme].backgroundColor
+					)}
+				>
+					{nav_items.map(({ link }, index) => {
+						// Extract the hash from the URL (e.g., #how-it-works)
+						const hash = link?.url?.split("#")[1];
+						const isActive = hash === activeSection;
+
+						return (
+							<React.Fragment key={`floatingSubNavLink-${index}`}>
+								{router.asPath === link?.url ? (
+									<div className="text-13 !leading-none opacity-100">{link?.title}</div>
+								) : (
+									<a
+										href={link?.url}
+										className={clsx("text-13 !leading-none transition-opacity duration-300 hover:opacity-100", isActive ? "opacity-100" : "opacity-40")}
+									>
+										{link?.title}
+									</a>
+								)}
+
+								{index < nav_items.length - 1 && <div className={clsx("h-3.5 w-px", themeMap[theme].spacerColor)} />}
+							</React.Fragment>
+						);
+					})}
+				</div>
+			</div>
+		</div>
+	);
+}
diff --git a/src/components/global/Logo.tsx b/src/components/global/Logo.tsx
new file mode 100644
index 00000000..72710953
--- /dev/null
+++ b/src/components/global/Logo.tsx
@@ -0,0 +1,23 @@
+import React from "react";
+
+export default function Logo({ ...props }) {
+	return (
+		<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 131 21" fill="none" {...props}>
+			<g clipPath="url(#clip0_1437_10427)">
+				<path
+					d="M11.5713 9.91525C11.8627 10.6493 12.0019 11.436 11.9801 12.2257V20.6898H8.54567V12.8802C8.55562 12.4505 8.49296 12.0218 8.36167 11.613C8.24729 11.3266 8.0802 11.063 7.87133 10.8363C7.6734 10.6443 7.43669 10.4971 7.1761 10.4066C6.89065 10.324 6.59425 10.2833 6.29686 10.2842C5.90797 10.2803 5.52008 10.3429 5.15207 10.4683C4.8149 10.5896 4.51254 10.7935 4.27284 11.061C3.99335 11.3743 3.78448 11.7433 3.65916 12.1442C3.50202 12.6892 3.42643 13.2542 3.43438 13.8211V20.6898H0V7.29844H3.43438V8.19756C3.6711 7.99963 3.92373 7.8216 4.19128 7.66644C5.04465 7.20693 6.00246 6.97519 6.97121 6.9921C7.61074 6.98911 8.2463 7.09255 8.85201 7.29844C9.45475 7.49537 10.0068 7.82359 10.4673 8.25923C10.9586 8.71874 11.3356 9.28566 11.5713 9.91525ZM26.8435 11.5305C27.0703 12.3421 27.1876 13.1815 27.1906 14.025V15.3945H17.3977C17.4355 15.6263 17.519 15.8491 17.6434 16.049C17.8254 16.424 18.0919 16.7532 18.4201 17.0098C18.7603 17.2883 19.1482 17.5031 19.5649 17.6434C20.0046 17.7995 20.468 17.8751 20.9345 17.8681C21.4945 17.892 22.0495 17.7498 22.5289 17.4594C23.0451 17.1301 23.5016 16.7154 23.8786 16.233L24.2257 15.8242L26.8425 17.8274L26.5153 18.2769C25.1049 20.0762 23.1217 20.9962 20.6272 20.9962C19.6545 21.0051 18.6887 20.8251 17.7856 20.4651C16.9561 20.1329 16.2101 19.6236 15.5984 18.9722C14.9997 18.3267 14.5342 17.5698 14.2289 16.7442C13.9126 15.866 13.7534 14.938 13.7584 14.0051C13.7564 13.0612 13.9295 12.1253 14.2696 11.245C14.6038 10.4145 15.0972 9.65765 15.7208 9.01712C16.3414 8.37659 17.0854 7.86934 17.9079 7.52421C18.7772 7.16814 19.7082 6.98712 20.6471 6.99309C21.8326 6.99309 22.8342 7.19798 23.6727 7.62666C24.4604 8.01455 25.1517 8.57352 25.6967 9.26179C26.2298 9.93216 26.6197 10.704 26.8415 11.5315L26.8435 11.5305ZM23.5513 12.4296C23.5086 12.1949 23.4539 11.9631 23.3882 11.7344C23.2748 11.3912 23.0859 11.077 22.8362 10.8144C22.5925 10.5379 22.2832 10.327 21.9371 10.2007C21.0738 9.86055 20.111 9.87547 19.2586 10.2415C18.8737 10.4096 18.5256 10.6523 18.2361 10.9566C17.9567 11.2381 17.7339 11.5713 17.5817 11.9383C17.5091 12.0954 17.4544 12.2595 17.4186 12.4286H23.5513V12.4296ZM35.0818 17.6434C34.8272 17.7 34.5666 17.7269 34.305 17.7249C34.0653 17.7368 33.8256 17.6881 33.6098 17.5817C33.4686 17.4743 33.3562 17.334 33.2826 17.1729C33.1901 16.9382 33.1413 16.6885 33.1394 16.4369C33.1185 16.1097 33.0986 15.7824 33.0986 15.4552V10.4255H36.4514V7.29744H33.0986V3.86306H29.6642V7.29744H27.4969V10.4255H29.6642V16.2728C29.6602 16.785 29.6881 17.2972 29.7458 17.8065C29.7835 18.3595 29.9437 18.8976 30.2162 19.3809C30.5355 19.8961 30.997 20.3079 31.545 20.5665C32.1179 20.853 32.8738 20.9962 33.8754 20.9962C34.2444 20.9922 34.6134 20.9653 34.9794 20.9146C35.424 20.8589 35.8536 20.7207 36.2465 20.5058L36.533 20.3626V16.9481L35.6945 17.4385C35.5025 17.5399 35.2957 17.6095 35.0808 17.6434H35.0818ZM51.9693 11.244C52.2836 12.1302 52.4427 13.0642 52.4397 14.0041C52.4437 14.9311 52.2846 15.8511 51.9693 16.7233C51.6639 17.5489 51.1985 18.3068 50.5997 18.9513C49.993 19.6037 49.254 20.1189 48.4324 20.4641C47.5433 20.8241 46.5914 21.0051 45.6316 20.9952C44.7196 20.9912 43.8195 20.7893 42.9939 20.4024C42.5842 20.2323 42.2052 19.9976 41.869 19.7072V20.6888H38.4346V0H41.869V8.25923C42.1903 8.00162 42.5404 7.78182 42.9114 7.60477C43.7608 7.19997 44.6897 6.99011 45.6306 6.9911C46.5904 6.98215 47.5423 7.16217 48.4315 7.52222C49.245 7.87232 49.9811 8.37957 50.5987 9.01513C51.1865 9.66958 51.65 10.4245 51.9683 11.2431L51.9693 11.244ZM48.5956 12.4714C48.4553 12.0348 48.2176 11.6369 47.9003 11.3057C47.595 10.9815 47.226 10.7239 46.8172 10.5488C45.8753 10.1937 44.8359 10.1937 43.8941 10.5488C43.4843 10.7239 43.1153 10.9815 42.8109 11.3057C42.5006 11.6409 42.2639 12.0387 42.1157 12.4714C41.9456 12.9647 41.8621 13.4829 41.87 14.0051C41.8651 14.5263 41.9476 15.0444 42.1157 15.5388C42.2689 15.9635 42.5046 16.3524 42.8109 16.6836C43.1103 17.0138 43.4813 17.2724 43.8941 17.4405C44.831 17.8214 45.8803 17.8214 46.8172 17.4405C47.231 17.2734 47.601 17.0148 47.9003 16.6836C48.2136 16.3573 48.4513 15.9664 48.5956 15.5388C48.7627 15.0454 48.8462 14.5263 48.8412 14.0051C48.8482 13.4839 48.7646 12.9647 48.5956 12.4714ZM65.851 18.9722C63.0423 21.6725 58.6013 21.6725 55.7926 18.9722C54.4827 17.6503 53.7476 15.865 53.7486 14.0041C53.7387 11.1794 55.4345 8.62823 58.0424 7.5441C59.8227 6.80809 61.8229 6.80809 63.6032 7.5441C66.2031 8.63817 67.8949 11.1834 67.8969 14.0041C67.8969 15.865 67.1629 17.6503 65.853 18.9722H65.851ZM64.0518 12.4714C63.9105 12.0397 63.6808 11.6429 63.3774 11.3057C63.0691 10.9854 62.7011 10.7288 62.2943 10.5488C61.3445 10.1947 60.3001 10.1947 59.3503 10.5488C58.9435 10.7288 58.5755 10.9854 58.2671 11.3057C57.9638 11.6429 57.734 12.0397 57.5928 12.4714C57.4058 12.9607 57.3153 13.4809 57.3272 14.0051C57.3193 14.5282 57.4088 15.0484 57.5928 15.5388C57.739 15.9615 57.9678 16.3514 58.2671 16.6836C58.5705 17.0098 58.9405 17.2674 59.3503 17.4405C60.2941 17.8224 61.3504 17.8224 62.2943 17.4405C62.7051 17.2674 63.0741 17.0098 63.3774 16.6836C63.6768 16.3514 63.9066 15.9615 64.0518 15.5388C64.2258 15.0464 64.3163 14.5282 64.3173 14.0051C64.3173 13.4829 64.2278 12.9637 64.0518 12.4714ZM81.2655 7.29844H77.0543L74.4166 11.2242L71.7381 7.29844H67.3221L72.1061 13.5744L66.7084 20.6888H70.9812L74.3131 15.9456L77.666 20.6888H82.0611L76.6634 13.5744L81.2635 7.29844H81.2655Z"
+					fill="currentColor"
+				/>
+				<path
+					d="M85.8848 0H89.3191V20.6898H85.8848V0ZM102.834 20.0762L102.896 20.6898H99.7058L99.6651 20.1786C99.6442 20.0155 99.6442 19.8514 99.6243 19.6883C99.2831 20.0016 98.8972 20.2641 98.4795 20.4651C97.0532 21.0569 95.4708 21.1583 93.9819 20.7515C93.4259 20.5814 92.9067 20.3119 92.4482 19.9538C91.9956 19.5858 91.6256 19.1263 91.3651 18.6041C91.1035 18.0263 90.9702 17.3987 90.9762 16.7641C90.9453 15.9535 91.1671 15.1539 91.6097 14.4745C92.0205 13.8469 92.5835 13.3337 93.2449 12.9816C93.9719 12.5927 94.7606 12.3302 95.5752 12.2048C96.4714 12.0367 97.3824 11.9542 98.2945 11.9592H99.4602C99.4403 11.7225 99.3925 11.4897 99.3169 11.2639C99.2125 11.0222 99.0673 10.8014 98.8873 10.6095C98.6804 10.4096 98.4377 10.2494 98.1722 10.139C97.8191 10.0077 97.4441 9.94608 97.0681 9.95503C96.717 9.95006 96.3659 9.99183 96.0258 10.0774C95.7453 10.148 95.4718 10.2435 95.2082 10.3638C94.9785 10.4732 94.7597 10.6035 94.5538 10.7527L93.9202 11.2431L93.5114 11.5494L91.3849 9.34136L91.8146 8.95247C92.5258 8.29304 93.3692 7.79077 94.2882 7.48045C95.1724 7.1572 96.1064 6.9921 97.0482 6.99011C97.8947 6.9722 98.7371 7.09653 99.5427 7.35811C100.206 7.57295 100.818 7.92007 101.342 8.38057C101.801 8.80228 102.164 9.31849 102.405 9.89337C102.616 10.4484 102.726 11.0372 102.732 11.6309V17.9069C102.732 18.3366 102.732 18.7245 102.753 19.0726C102.774 19.4197 102.794 19.7678 102.835 20.0742L102.834 20.0762ZM98.7649 14.7809C98.2338 14.7809 97.6818 14.8217 97.1298 14.8624C96.6345 14.9112 96.1471 15.0216 95.6787 15.1897C95.3166 15.311 94.9884 15.5139 94.7179 15.7824C94.511 15.9953 94.3996 16.2827 94.4115 16.5801C94.4115 17.2754 94.4931 17.4186 94.882 17.6632C95.2709 17.9089 95.802 18.0313 96.5171 18.0313C96.9945 18.0501 97.47 17.9586 97.9076 17.7657C98.2527 17.6085 98.5541 17.3708 98.7868 17.0705C99.0235 16.79 99.1976 16.4628 99.298 16.1097C99.4025 15.7506 99.4572 15.3796 99.4612 15.0057V14.7809H98.7659H98.7649ZM118.411 11.244C118.726 12.1302 118.885 13.0642 118.882 14.0041C118.886 14.9311 118.727 15.8511 118.411 16.7233C118.106 17.5489 117.641 18.3068 117.042 18.9513C116.435 19.6037 115.696 20.1189 114.875 20.4641C113.991 20.8221 113.047 21.0031 112.095 20.9952C111.177 20.9912 110.27 20.7893 109.437 20.4024C109.027 20.2323 108.648 19.9976 108.312 19.7072V20.6888H104.878V0H108.312V8.25923C108.633 8.00162 108.984 7.78182 109.355 7.60477C110.21 7.19699 111.147 6.98812 112.094 6.9911C113.047 6.98314 113.991 7.16416 114.874 7.52222C115.69 7.86735 116.427 8.3756 117.041 9.01513C117.629 9.66958 118.092 10.4245 118.41 11.2431L118.411 11.244ZM115.039 12.4714C114.898 12.0348 114.661 11.6369 114.343 11.3057C114.038 10.9815 113.669 10.7239 113.26 10.5488C112.318 10.1937 111.279 10.1937 110.337 10.5488C109.927 10.7239 109.558 10.9815 109.254 11.3057C108.944 11.6409 108.707 12.0387 108.559 12.4714C108.389 12.9647 108.305 13.4829 108.313 14.0051C108.308 14.5263 108.391 15.0444 108.559 15.5388C108.712 15.9635 108.948 16.3524 109.254 16.6836C109.553 17.0138 109.924 17.2724 110.337 17.4405C111.274 17.8214 112.323 17.8214 113.26 17.4405C113.674 17.2734 114.044 17.0148 114.343 16.6836C114.657 16.3573 114.895 15.9664 115.039 15.5388C115.206 15.0454 115.289 14.5263 115.284 14.0051C115.291 13.4839 115.208 12.9647 115.039 12.4714ZM130.044 14.9042C129.835 14.4487 129.527 14.0439 129.145 13.7186C128.763 13.3775 128.319 13.1139 127.836 12.9418C127.358 12.7489 126.866 12.5917 126.364 12.4714H126.343L125.403 12.2874C125.093 12.2357 124.791 12.1462 124.503 12.0218C124.254 11.9134 124.025 11.7612 123.829 11.5723C123.698 11.4529 123.63 11.2789 123.645 11.1018C123.636 10.8701 123.764 10.6542 123.972 10.5498C124.331 10.3618 124.733 10.2693 125.138 10.2842C125.563 10.2663 125.985 10.3579 126.364 10.5498C126.695 10.7388 126.986 10.9884 127.223 11.2858L127.57 11.7155L130.207 9.71235L129.942 9.28268C129.465 8.47406 128.73 7.84746 127.856 7.50432C127.041 7.16217 126.164 6.98911 125.28 6.99309C124.651 6.99011 124.023 7.07962 123.42 7.25865C122.827 7.41679 122.266 7.67937 121.764 8.03544C121.259 8.38753 120.839 8.84803 120.538 9.38512C120.208 9.97791 120.046 10.6493 120.067 11.3276C120.05 11.9283 120.176 12.5241 120.435 13.0652C120.67 13.5227 121.005 13.9215 121.417 14.2309C121.826 14.5342 122.281 14.7689 122.767 14.9261C123.23 15.0892 123.721 15.2324 124.239 15.3558H124.26L125.139 15.5398C125.435 15.6014 125.724 15.6969 125.997 15.8262C126.225 15.9137 126.428 16.054 126.59 16.235C126.721 16.3543 126.789 16.5284 126.774 16.7054C126.778 16.8328 126.734 16.9561 126.652 17.0526C126.547 17.1938 126.415 17.3122 126.263 17.3997C126.055 17.5021 125.835 17.5777 125.608 17.6245C125.352 17.6732 125.092 17.7 124.832 17.706C124.335 17.7269 123.844 17.5986 123.421 17.338C122.996 17.0725 122.599 16.7641 122.236 16.418L121.889 16.05L119.333 18.1765L119.64 18.6061C120.223 19.4327 121.022 20.0831 121.95 20.4869C122.867 20.848 123.848 21.021 124.833 20.9982C125.48 21.0051 126.126 20.9295 126.754 20.7734C127.389 20.6431 127.992 20.3934 128.533 20.0374C129.064 19.6734 129.51 19.1989 129.841 18.6469C130.199 18.0183 130.376 17.3042 130.353 16.5821C130.366 16.0082 130.261 15.4383 130.046 14.9052L130.044 14.9042Z"
+					fill="#00F2D4"
+				/>
+			</g>
+			<defs>
+				<clipPath id="clip0_1437_10427">
+					<rect width="130.353" height="20.9982" fill="white" />
+				</clipPath>
+			</defs>
+		</svg>
+	);
+}
diff --git a/src/components/global/LogoOnlyHeader.tsx b/src/components/global/LogoOnlyHeader.tsx
new file mode 100644
index 00000000..402e593f
--- /dev/null
+++ b/src/components/global/LogoOnlyHeader.tsx
@@ -0,0 +1,16 @@
+import Logo from "./Logo";
+import React from "react";
+
+function LogoOnlyHeader() {
+	return (
+		<header className="fixed inset-x-0 top-0 z-[101] flex h-[var(--header-height)] w-full text-white transition-shadow duration-300">
+			<div className="container flex flex-1 items-center justify-start py-3 sm:py-4">
+				<a href="/" aria-label="Back to Home" className="block w-28 transition-opacity duration-200 hover:opacity-70 sm:w-[8.125rem]">
+					<Logo />
+				</a>
+			</div>
+		</header>
+	);
+}
+
+export default LogoOnlyHeader;
diff --git a/src/components/global/SiteIcons.tsx b/src/components/global/SiteIcons.tsx
new file mode 100644
index 00000000..94518b6e
--- /dev/null
+++ b/src/components/global/SiteIcons.tsx
@@ -0,0 +1,255 @@
+/* eslint-disable import/prefer-default-export */
+
+export function ClockIcon({ ...props }) {
+	return (
+		<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 12 12" fill="none" {...props}>
+			<g clipPath="url(#clip0_1530_1693)">
+				<path
+					d="M6 0.941406C4.99873 0.941406 4.01995 1.23832 3.18743 1.79459C2.3549 2.35087 1.70603 3.14152 1.32286 4.06657C0.939694 4.99162 0.839439 6.00952 1.03478 6.99155C1.23011 7.97358 1.71227 8.87563 2.42027 9.58363C3.12828 10.2916 4.03033 10.7738 5.01236 10.9691C5.99439 11.1645 7.01229 11.0642 7.93734 10.681C8.86239 10.2979 9.65304 9.649 10.2093 8.81648C10.7656 7.98396 11.0625 7.00517 11.0625 6.00391C11.061 4.6617 10.5272 3.3749 9.57809 2.42582C8.62901 1.47674 7.3422 0.942895 6 0.941406ZM6 9.94141C5.22124 9.94141 4.45996 9.71048 3.81244 9.27782C3.16493 8.84516 2.66025 8.23021 2.36223 7.51072C2.06421 6.79124 1.98623 5.99954 2.13816 5.23574C2.29009 4.47194 2.6651 3.77034 3.21577 3.21967C3.76644 2.669 4.46803 2.29399 5.23183 2.14206C5.99563 1.99013 6.78733 2.06811 7.50682 2.36613C8.2263 2.66415 8.84126 3.16883 9.27391 3.81635C9.70657 4.46387 9.9375 5.22514 9.9375 6.00391C9.93639 7.04785 9.52118 8.04872 8.783 8.78691C8.04482 9.52509 7.04395 9.94029 6 9.94141ZM9.1875 6.00391C9.1875 6.15309 9.12824 6.29616 9.02275 6.40165C8.91726 6.50714 8.77419 6.56641 8.625 6.56641H6C5.85082 6.56641 5.70774 6.50714 5.60225 6.40165C5.49677 6.29616 5.4375 6.15309 5.4375 6.00391V3.37891C5.4375 3.22972 5.49677 3.08665 5.60225 2.98116C5.70774 2.87567 5.85082 2.81641 6 2.81641C6.14919 2.81641 6.29226 2.87567 6.39775 2.98116C6.50324 3.08665 6.5625 3.22972 6.5625 3.37891V5.44141H8.625C8.77419 5.44141 8.91726 5.50067 9.02275 5.60616C9.12824 5.71165 9.1875 5.85472 9.1875 6.00391Z"
+					fill="currentColor"
+				/>
+			</g>
+			<defs>
+				<clipPath id="clip0_1530_1693">
+					<rect width="12" height="12" fill="white" transform="translate(0 0.00390625)" />
+				</clipPath>
+			</defs>
+		</svg>
+	);
+}
+
+export function ArrowRightIcon({ ...props }) {
+	return (
+		<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 10 9" fill="none" {...props}>
+			<path
+				d="M5.61435 8.63991L4.90341 7.93821L7.83026 5.01136H0.25V3.99574H7.83026L4.90341 1.07812L5.61435 0.367188L9.75071 4.50355L5.61435 8.63991Z"
+				fill="currentColor"
+			/>
+		</svg>
+	);
+}
+
+export function CubeIcon({ ...props }) {
+	return (
+		<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 20 21" fill="none" {...props}>
+			<path
+				d="M2.0125 6.65607V6.65631L2.0125 14.3437L2.0125 14.3439C2.01303 14.593 2.07654 14.8378 2.19687 15.0527C2.31721 15.2677 2.49021 15.4453 2.69848 15.5663C2.69849 15.5663 2.69849 15.5663 2.6985 15.5663L9.36154 19.4378C9.36156 19.4378 9.36158 19.4379 9.36159 19.4379C9.55661 19.5522 9.77629 19.6125 10 19.6125C10.2237 19.6125 10.4434 19.5522 10.6384 19.4379C10.6384 19.4379 10.6384 19.4378 10.6385 19.4378L17.3015 15.5663C17.3015 15.5663 17.3015 15.5663 17.3015 15.5663C17.5098 15.4453 17.6828 15.2677 17.8031 15.0527C17.9235 14.8378 17.987 14.593 17.9875 14.3439V14.3437V6.65712V6.65708C17.9874 6.40751 17.9241 6.1622 17.8038 5.94678C17.6834 5.73132 17.5101 5.55331 17.3015 5.43213L10.6385 1.56216C10.6384 1.56211 10.6383 1.56206 10.6382 1.56201C10.4432 1.44772 10.2236 1.3875 10 1.3875C9.77635 1.3875 9.55673 1.44773 9.36174 1.56204C9.36168 1.56208 9.36161 1.56212 9.36154 1.56216L2.6985 5.43374C2.69849 5.43374 2.69849 5.43374 2.69848 5.43375C2.49021 5.55472 2.31721 5.73231 2.19687 5.94726C2.07654 6.16218 2.01303 6.40695 2.0125 6.65607ZM4.1404 6.32114L10 2.91463L15.8596 6.32114L10 9.72765L4.1404 6.32114ZM3.44904 14.2797V7.64189L9.28173 11.0301V17.6656L3.44904 14.2797ZM16.551 14.2765L10.7183 17.6656V11.0333L16.551 7.64198V14.2765Z"
+				fill="currentColor"
+				stroke="currentColor"
+				strokeWidth="0.225"
+			/>
+		</svg>
+	);
+}
+
+export function MagnifyingGlassIcon({ ...props }) {
+	return (
+		<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 20 20" fill="none" {...props}>
+			<path
+				d="M17.9438 17.0595L14.0321 13.1485C15.1659 11.7874 15.7312 10.0415 15.6106 8.27409C15.4899 6.5067 14.6925 4.85387 13.3843 3.65943C12.076 2.46499 10.3576 1.8209 8.58657 1.86115C6.81553 1.9014 5.12818 2.62289 3.87554 3.87554C2.62289 5.12818 1.9014 6.81553 1.86115 8.58657C1.8209 10.3576 2.46499 12.076 3.65943 13.3843C4.85387 14.6925 6.5067 15.4899 8.27409 15.6106C10.0415 15.7312 11.7874 15.1659 13.1485 14.0321L17.0595 17.9438C17.1175 18.0019 17.1865 18.048 17.2623 18.0794C17.3382 18.1108 17.4195 18.127 17.5016 18.127C17.5838 18.127 17.6651 18.1108 17.741 18.0794C17.8168 18.048 17.8858 18.0019 17.9438 17.9438C18.0019 17.8858 18.048 17.8168 18.0794 17.741C18.1108 17.6651 18.127 17.5838 18.127 17.5016C18.127 17.4195 18.1108 17.3382 18.0794 17.2623C18.048 17.1865 18.0019 17.1175 17.9438 17.0595ZM3.12664 8.75164C3.12664 7.63912 3.45654 6.55159 4.07463 5.62656C4.69271 4.70153 5.57121 3.98056 6.59905 3.55482C7.62688 3.12908 8.75788 3.01768 9.84903 3.23473C10.9402 3.45177 11.9424 3.9875 12.7291 4.77417C13.5158 5.56084 14.0515 6.56312 14.2686 7.65426C14.4856 8.7454 14.3742 9.8764 13.9485 10.9042C13.5227 11.9321 12.8018 12.8106 11.8767 13.4287C10.9517 14.0467 9.86416 14.3766 8.75164 14.3766C7.26031 14.375 5.83053 13.7818 4.77599 12.7273C3.72146 11.6728 3.1283 10.243 3.12664 8.75164Z"
+				fill="currentColor"
+			/>
+		</svg>
+	);
+}
+
+export function XIcon({ ...props }) {
+	return (
+		<svg xmlns="http://www.w3.org/2000/svg" width="15" height="13" viewBox="0 0 15 13" fill="none" {...props}>
+			<path d="M6.85117 8.26873L3.23903 12.3931H1.23828L5.91667 7.04883L6.85117 8.26873Z" fill="currentColor" />
+			<path d="M7.94141 4.39088L11.2488 0.607422H13.2483L8.86749 5.61751L7.94141 4.39088Z" fill="currentColor" />
+			<path
+				d="M14.0197 12.3939H9.99586L0.980469 0.607422H5.10615L14.0197 12.3939ZM10.5477 11.1971H11.6556L4.5042 1.74145H3.31545L10.5477 11.1971Z"
+				fill="currentColor"
+			/>
+		</svg>
+	);
+}
+
+export function LinkedInIcon({ ...props }) {
+	return (
+		<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 15 15" fill="none" {...props}>
+			<g clipPath="url(#clip0_708_47590)">
+				<path
+					d="M13.9499 0.425781H1.04453C0.69096 0.425781 0.425781 0.69096 0.425781 1.04453V14.0383C0.425781 14.3035 0.69096 14.5686 1.04453 14.5686H14.0383C14.3919 14.5686 14.657 14.3035 14.657 13.9499V1.04453C14.5686 0.69096 14.3035 0.425781 13.9499 0.425781ZM4.58025 12.4472H2.54721V5.72935H4.66864V12.4472H4.58025ZM3.60792 4.84542C2.90078 4.84542 2.37042 4.22667 2.37042 3.60792C2.37042 2.90078 2.90078 2.37042 3.60792 2.37042C4.31507 2.37042 4.84542 2.90078 4.84542 3.60792C4.75703 4.22667 4.22667 4.84542 3.60792 4.84542ZM12.4472 12.4472H10.3258V9.17667C10.3258 8.38114 10.3258 7.40882 9.26507 7.40882C8.20435 7.40882 8.02757 8.29275 8.02757 9.17667V12.5356H5.90614V5.72935H7.93917V6.61328C8.20435 6.08292 8.9115 5.55257 9.88382 5.55257C12.0052 5.55257 12.3588 6.96685 12.3588 8.73471V12.4472H12.4472Z"
+					fill="currentColor"
+				/>
+			</g>
+			<defs>
+				<clipPath id="clip0_708_47590">
+					<rect width="14.1429" height="14.1429" fill="white" transform="translate(0.429688 0.427734)" />
+				</clipPath>
+			</defs>
+		</svg>
+	);
+}
+
+export function FacebookIcon({ ...props }) {
+	return (
+		<svg xmlns="http://www.w3.org/2000/svg" width="7" height="13" viewBox="0 0 7 13" fill="none" {...props}>
+			<path
+				d="M2.14466 12.875V7.05912H0.1875V4.79256H2.14466V3.12104C2.14466 1.18125 3.32942 0.125 5.05984 0.125C5.88873 0.125 6.60112 0.186713 6.80873 0.214296V2.24149L5.60859 2.24203C4.66749 2.24203 4.48527 2.68923 4.48527 3.34546V4.79256H6.72971L6.43747 7.05912H4.48526V12.875H2.14466Z"
+				fill="currentColor"
+			/>
+		</svg>
+	);
+}
+
+export function CalendarIcon({ ...props }) {
+	return (
+		<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 13 13" fill="none" {...props}>
+			<path
+				d="M11.5 1.00391H10V0.503906C10 0.371298 9.94732 0.244121 9.85355 0.150353C9.75979 0.0565846 9.63261 0.00390625 9.5 0.00390625C9.36739 0.00390625 9.24021 0.0565846 9.14645 0.150353C9.05268 0.244121 9 0.371298 9 0.503906V1.00391H4V0.503906C4 0.371298 3.94732 0.244121 3.85355 0.150353C3.75979 0.0565846 3.63261 0.00390625 3.5 0.00390625C3.36739 0.00390625 3.24021 0.0565846 3.14645 0.150353C3.05268 0.244121 3 0.371298 3 0.503906V1.00391H1.5C1.23478 1.00391 0.98043 1.10926 0.792893 1.2968C0.605357 1.48434 0.5 1.73869 0.5 2.00391V12.0039C0.5 12.2691 0.605357 12.5235 0.792893 12.711C0.98043 12.8985 1.23478 13.0039 1.5 13.0039H11.5C11.7652 13.0039 12.0196 12.8985 12.2071 12.711C12.3946 12.5235 12.5 12.2691 12.5 12.0039V2.00391C12.5 1.73869 12.3946 1.48434 12.2071 1.2968C12.0196 1.10926 11.7652 1.00391 11.5 1.00391ZM3 2.00391V2.50391C3 2.63651 3.05268 2.76369 3.14645 2.85746C3.24021 2.95123 3.36739 3.00391 3.5 3.00391C3.63261 3.00391 3.75979 2.95123 3.85355 2.85746C3.94732 2.76369 4 2.63651 4 2.50391V2.00391H9V2.50391C9 2.63651 9.05268 2.76369 9.14645 2.85746C9.24021 2.95123 9.36739 3.00391 9.5 3.00391C9.63261 3.00391 9.75979 2.95123 9.85355 2.85746C9.94732 2.76369 10 2.63651 10 2.50391V2.00391H11.5V4.00391H1.5V2.00391H3ZM11.5 12.0039H1.5V5.00391H11.5V12.0039Z"
+				fill="currentColor"
+			/>
+		</svg>
+	);
+}
+
+export function LocationIcon({ ...props }) {
+	return (
+		<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 15 15" fill="none" {...props}>
+			<path
+				d="M14.5 7.00391H12.9769C12.8584 5.72397 12.296 4.52579 11.387 3.61687C10.4781 2.70795 9.27993 2.14553 8 2.02703V0.503906C8 0.371298 7.94732 0.244121 7.85355 0.150353C7.75979 0.0565846 7.63261 0.00390625 7.5 0.00390625C7.36739 0.00390625 7.24021 0.0565846 7.14645 0.150353C7.05268 0.244121 7 0.371298 7 0.503906V2.02703C5.72007 2.14553 4.52188 2.70795 3.61296 3.61687C2.70404 4.52579 2.14163 5.72397 2.02312 7.00391H0.5C0.367392 7.00391 0.240215 7.05658 0.146447 7.15035C0.0526784 7.24412 0 7.3713 0 7.50391C0 7.63651 0.0526784 7.76369 0.146447 7.85746C0.240215 7.95123 0.367392 8.00391 0.5 8.00391H2.02312C2.14163 9.28384 2.70404 10.482 3.61296 11.3909C4.52188 12.2999 5.72007 12.8623 7 12.9808V14.5039C7 14.6365 7.05268 14.7637 7.14645 14.8575C7.24021 14.9512 7.36739 15.0039 7.5 15.0039C7.63261 15.0039 7.75979 14.9512 7.85355 14.8575C7.94732 14.7637 8 14.6365 8 14.5039V12.9808C9.27993 12.8623 10.4781 12.2999 11.387 11.3909C12.296 10.482 12.8584 9.28384 12.9769 8.00391H14.5C14.6326 8.00391 14.7598 7.95123 14.8536 7.85746C14.9473 7.76369 15 7.63651 15 7.50391C15 7.3713 14.9473 7.24412 14.8536 7.15035C14.7598 7.05658 14.6326 7.00391 14.5 7.00391ZM7.5 12.0039C6.60998 12.0039 5.73995 11.74 4.99993 11.2455C4.25991 10.7511 3.68314 10.0482 3.34254 9.22598C3.00195 8.40371 2.91283 7.49891 3.08647 6.626C3.2601 5.75309 3.68868 4.95126 4.31802 4.32193C4.94736 3.69259 5.74918 3.26401 6.62209 3.09037C7.49501 2.91674 8.39981 3.00585 9.22208 3.34645C10.0443 3.68704 10.7471 4.26382 11.2416 5.00384C11.7361 5.74386 12 6.61389 12 7.50391C11.9987 8.69697 11.5241 9.8408 10.6805 10.6844C9.83689 11.5281 8.69307 12.0026 7.5 12.0039Z"
+				fill="currentColor"
+			/>
+		</svg>
+	);
+}
+
+export function DownloadIcon({ ...props }) {
+	return (
+		<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none" {...props}>
+			<path
+				d="M9.05389 8.32819V1.62327C9.05389 1.42528 8.97524 1.23539 8.83524 1.09539C8.69524 0.955387 8.50535 0.876735 8.30736 0.876735C8.10937 0.876735 7.91948 0.955387 7.77948 1.09539C7.63948 1.23539 7.56082 1.42528 7.56082 1.62327V8.32819L5.79727 6.56397L5.79726 6.56395C5.65719 6.42388 5.46722 6.3452 5.26914 6.3452C5.07105 6.3452 4.88108 6.42388 4.74102 6.56395C4.60095 6.70402 4.52226 6.89399 4.52226 7.09207C4.52226 7.29015 4.60095 7.48012 4.74102 7.62019L7.77919 10.6584C7.84852 10.7278 7.93085 10.7828 8.02148 10.8204C8.11211 10.858 8.20925 10.8773 8.30736 10.8773C8.40546 10.8773 8.50261 10.858 8.59324 10.8204C8.68387 10.7828 8.7662 10.7278 8.83553 10.6584L11.8737 7.62019C11.9431 7.55083 11.9981 7.4685 12.0356 7.37789C12.0731 7.28727 12.0925 7.19015 12.0925 7.09207C12.0925 6.99399 12.0731 6.89687 12.0356 6.80625C11.9981 6.71564 11.9431 6.63331 11.8737 6.56395C11.8043 6.4946 11.722 6.43958 11.6314 6.40205C11.5408 6.36452 11.4437 6.3452 11.3456 6.3452C11.2475 6.3452 11.1504 6.36452 11.0598 6.40205C10.9692 6.43958 10.8868 6.4946 10.8175 6.56395L10.8174 6.56397L9.05389 8.32819ZM15.738 14.9914V10.1303C15.738 9.9323 15.6593 9.74242 15.5193 9.60241C15.3793 9.46241 15.1894 9.38376 14.9914 9.38376C14.7935 9.38376 14.6036 9.46241 14.4636 9.60241C14.3236 9.74242 14.2449 9.9323 14.2449 10.1303V14.2449H2.3698V10.1303C2.3698 9.9323 2.29115 9.74241 2.15115 9.60241C2.01115 9.46241 1.82126 9.38376 1.62327 9.38376C1.42528 9.38376 1.23539 9.46241 1.09539 9.60241C0.955387 9.74241 0.876735 9.9323 0.876735 10.1303V14.9914C0.876735 15.1894 0.955387 15.3793 1.09539 15.5193C1.23539 15.6593 1.42528 15.738 1.62327 15.738H14.9914C15.1894 15.738 15.3793 15.6593 15.5193 15.5193C15.6593 15.3793 15.738 15.1894 15.738 14.9914Z"
+				fill="currentColor"
+				stroke="currentColor"
+				strokeWidth="0.27778"
+			/>
+		</svg>
+	);
+}
+
+export function CloseIcon({ ...props }) {
+	return (
+		<svg xmlns="http://www.w3.org/2000/svg" width="30" height="30" viewBox="0 0 30 30" fill="none" {...props}>
+			<path d="M22.4258 7.42383L7.57654 22.2731" stroke="currentColor" />
+			<path d="M22.4258 22.2734L7.57654 7.42419" stroke="currentColor" />
+		</svg>
+	);
+}
+
+export function LinkIcon({ ...props }) {
+	return (
+		<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 17 17" fill="none" {...props}>
+			<path
+				d="M15.5004 6.0152C15.4753 6.88561 15.1174 7.71326 14.5004 8.3277L12.3285 10.5008C12.0122 10.8189 11.6359 11.071 11.2215 11.2427C10.807 11.4143 10.3627 11.5021 9.91411 11.5008H9.91098C9.45475 11.5005 9.00322 11.4088 8.58305 11.231C8.16287 11.0532 7.78259 10.7931 7.46465 10.4659C7.14671 10.1387 6.89757 9.75107 6.73195 9.32596C6.56633 8.90086 6.48758 8.44688 6.50036 7.99083C6.50409 7.85822 6.56034 7.73252 6.65675 7.64139C6.75315 7.55026 6.88181 7.50116 7.01442 7.50489C7.14703 7.50862 7.27272 7.56487 7.36385 7.66128C7.45498 7.75769 7.50409 7.88634 7.50036 8.01895C7.49125 8.34141 7.54687 8.66241 7.66394 8.96301C7.781 9.2636 7.95713 9.53768 8.18191 9.76905C8.4067 10.0004 8.67558 10.1844 8.97267 10.3101C9.26976 10.4358 9.58902 10.5006 9.91161 10.5008C10.2287 10.5016 10.5428 10.4396 10.8358 10.3183C11.1288 10.1969 11.3948 10.0187 11.6185 9.79395L13.7904 7.62208C14.2385 7.16833 14.4888 6.55573 14.4868 5.91802C14.4849 5.28031 14.2306 4.66929 13.7797 4.21835C13.3288 3.76742 12.7178 3.51321 12.08 3.51121C11.4423 3.50922 10.8297 3.7596 10.376 4.2077L9.68848 4.8952C9.59395 4.98501 9.46808 5.03434 9.3377 5.03267C9.20731 5.031 9.08274 4.97847 8.99054 4.88627C8.89834 4.79407 8.84581 4.66949 8.84414 4.53911C8.84247 4.40873 8.8918 4.28286 8.98161 4.18833L9.66911 3.50083C9.98629 3.18353 10.3629 2.93184 10.7774 2.76011C11.1918 2.58839 11.6361 2.5 12.0847 2.5C12.5334 2.5 12.9776 2.58839 13.3921 2.76011C13.8066 2.93184 14.1832 3.18353 14.5004 3.50083C14.8289 3.83018 15.087 4.22293 15.2589 4.65519C15.4308 5.08746 15.513 5.55018 15.5004 6.0152ZM7.31286 12.1046L6.62536 12.7921C6.40112 13.0178 6.13425 13.1967 5.84026 13.3184C5.54627 13.4401 5.23103 13.5021 4.91286 13.5008C4.43555 13.5004 3.96906 13.3586 3.57233 13.0932C3.17561 12.8278 2.86645 12.4508 2.68393 12.0097C2.5014 11.5687 2.4537 11.0835 2.54684 10.6153C2.63998 10.1472 2.86979 9.71715 3.20723 9.37958L5.37536 7.2077C5.71685 6.86441 6.15367 6.63173 6.6291 6.53988C7.10453 6.44803 7.59659 6.50126 8.04138 6.69266C8.48616 6.88405 8.86312 7.20476 9.1233 7.61314C9.38348 8.02152 9.51485 8.4987 9.50036 8.9827C9.49663 9.11531 9.54573 9.24397 9.63686 9.34037C9.72799 9.43678 9.85369 9.49303 9.98629 9.49676C10.1189 9.50049 10.2476 9.45139 10.344 9.36026C10.4404 9.26913 10.4966 9.14344 10.5004 9.01083C10.5124 8.54653 10.4299 8.08464 10.258 7.65317C10.0861 7.22171 9.82835 6.82966 9.50036 6.50083C8.85985 5.86059 7.99129 5.50094 7.08567 5.50094C6.18005 5.50094 5.31149 5.86059 4.67098 6.50083L2.50036 8.6727C2.023 9.14986 1.6978 9.75782 1.56586 10.4197C1.43392 11.0817 1.50116 11.7679 1.75908 12.3916C2.01699 13.0153 2.45401 13.5486 3.01491 13.924C3.57581 14.2994 4.23541 14.5002 4.91036 14.5008C5.35903 14.5021 5.8035 14.4144 6.21803 14.2428C6.63257 14.0711 7.00894 13.8189 7.32536 13.5008L8.01286 12.8133C8.09377 12.718 8.13605 12.5958 8.13134 12.4709C8.12663 12.346 8.07529 12.2273 7.98744 12.1384C7.89958 12.0494 7.78159 11.9966 7.65672 11.9904C7.53185 11.9841 7.40916 12.0249 7.31286 12.1046Z"
+				fill="currentColor"
+			/>
+		</svg>
+	);
+}
+
+export function SadFaceIcon({ ...props }) {
+	return (
+		<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32" fill="none" {...props}>
+			<path
+				d="M16 3C13.4288 3 10.9154 3.76244 8.77759 5.1909C6.63975 6.61935 4.97351 8.64968 3.98957 11.0251C3.00563 13.4006 2.74819 16.0144 3.2498 18.5362C3.75141 21.0579 4.98953 23.3743 6.80762 25.1924C8.6257 27.0105 10.9421 28.2486 13.4638 28.7502C15.9856 29.2518 18.5995 28.9944 20.9749 28.0104C23.3503 27.0265 25.3807 25.3603 26.8091 23.2224C28.2376 21.0846 29 18.5712 29 16C28.9964 12.5533 27.6256 9.24882 25.1884 6.81163C22.7512 4.37445 19.4467 3.00364 16 3ZM16 27C13.8244 27 11.6977 26.3549 9.88873 25.1462C8.07979 23.9375 6.66989 22.2195 5.83733 20.2095C5.00477 18.1995 4.78693 15.9878 5.21137 13.854C5.63581 11.7202 6.68345 9.7602 8.22183 8.22183C9.76021 6.68345 11.7202 5.6358 13.854 5.21136C15.9878 4.78692 18.1995 5.00476 20.2095 5.83733C22.2195 6.66989 23.9375 8.07979 25.1462 9.88873C26.3549 11.6977 27 13.8244 27 16C26.9967 18.9164 25.8367 21.7123 23.7745 23.7745C21.7123 25.8367 18.9164 26.9967 16 27ZM10 13.5C10 13.2033 10.088 12.9133 10.2528 12.6666C10.4176 12.42 10.6519 12.2277 10.926 12.1142C11.2001 12.0006 11.5017 11.9709 11.7926 12.0288C12.0836 12.0867 12.3509 12.2296 12.5607 12.4393C12.7704 12.6491 12.9133 12.9164 12.9712 13.2074C13.0291 13.4983 12.9994 13.7999 12.8858 14.074C12.7723 14.3481 12.58 14.5824 12.3334 14.7472C12.0867 14.912 11.7967 15 11.5 15C11.1022 15 10.7206 14.842 10.4393 14.5607C10.158 14.2794 10 13.8978 10 13.5ZM22 13.5C22 13.7967 21.912 14.0867 21.7472 14.3334C21.5824 14.58 21.3481 14.7723 21.074 14.8858C20.7999 14.9994 20.4983 15.0291 20.2074 14.9712C19.9164 14.9133 19.6491 14.7704 19.4393 14.5607C19.2296 14.3509 19.0867 14.0836 19.0288 13.7926C18.971 13.5017 19.0007 13.2001 19.1142 12.926C19.2277 12.6519 19.42 12.4176 19.6667 12.2528C19.9133 12.088 20.2033 12 20.5 12C20.8978 12 21.2794 12.158 21.5607 12.4393C21.842 12.7206 22 13.1022 22 13.5ZM21.865 21.5C21.9374 21.6138 21.9859 21.7411 22.0078 21.8742C22.0297 22.0073 22.0245 22.1434 21.9924 22.2744C21.9603 22.4054 21.902 22.5285 21.8211 22.6364C21.7402 22.7443 21.6383 22.8348 21.5215 22.9022C21.4048 22.9697 21.2756 23.0129 21.1417 23.0292C21.0078 23.0454 20.872 23.0345 20.7425 22.9969C20.6129 22.9593 20.4924 22.8959 20.388 22.8105C20.2836 22.7251 20.1975 22.6195 20.135 22.5C19.2013 20.8862 17.7338 20 16 20C14.2663 20 12.7988 20.8875 11.865 22.5C11.8025 22.6195 11.7164 22.7251 11.6121 22.8105C11.5077 22.8959 11.3871 22.9593 11.2575 22.9969C11.128 23.0345 10.9922 23.0454 10.8583 23.0292C10.7245 23.0129 10.5952 22.9697 10.4785 22.9022C10.3617 22.8348 10.2598 22.7443 10.1789 22.6364C10.098 22.5285 10.0397 22.4054 10.0076 22.2744C9.97555 22.1434 9.97029 22.0073 9.99218 21.8742C10.0141 21.7411 10.0627 21.6138 10.135 21.5C11.4213 19.2762 13.5588 18 16 18C18.4413 18 20.5788 19.275 21.865 21.5Z"
+				fill="currentColor"
+			/>
+		</svg>
+	);
+}
+
+export function PlusIcon({ ...props }) {
+	return (
+		<svg xmlns="http://www.w3.org/2000/svg" width="11" height="11" viewBox="0 0 11 11" fill="none" {...props}>
+			<path d="M10.5898 5.50195L0.404659 5.50195" stroke="currentColor" />
+			<path d="M5.49609 0.408203L5.49609 10.5934" stroke="currentColor" />
+		</svg>
+	);
+}
+
+export function CaretRightIcon({ ...props }) {
+	return (
+		<svg xmlns="http://www.w3.org/2000/svg" width="7" height="12" viewBox="0 0 7 12" fill="none" {...props}>
+			<path d="M0.734375 1.46484L5.26953 6L0.734375 10.5352" stroke="currentColor" strokeOpacity="0.6" strokeWidth="1.4375" strokeLinecap="round" />
+		</svg>
+	);
+}
+
+export function CaretDownIcon({ ...props }) {
+	return (
+		<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 16 16" fill="none" {...props}>
+			<g clipPath="url(#clip0_1201_26921)">
+				<path d="M13 6L8 11L3 6" stroke="currentColor" strokeWidth="1.28" strokeLinecap="square" />
+			</g>
+			<defs>
+				<clipPath id="clip0_1201_26921">
+					<rect width="16" height="16" fill="currentColor" />
+				</clipPath>
+			</defs>
+		</svg>
+	);
+}
+
+export function PlayIcon({ ...props }) {
+	return (
+		<svg xmlns="http://www.w3.org/2000/svg" width="22" height="25" viewBox="0 0 22 25" fill="none" {...props}>
+			<path
+				d="M1.78516 2.39331V22.9714C1.78821 23.1357 1.8345 23.2962 1.91937 23.4368C2.00423 23.5774 2.12467 23.6931 2.26854 23.7723C2.41242 23.8516 2.57463 23.8915 2.73883 23.888C2.90304 23.8845 3.06342 23.8378 3.20381 23.7526L20.0269 13.4635C20.1613 13.3822 20.2724 13.2676 20.3495 13.1307C20.4266 12.9939 20.4672 12.8395 20.4672 12.6824C20.4672 12.5253 20.4266 12.3709 20.3495 12.234C20.2724 12.0972 20.1613 11.9826 20.0269 11.9012L3.20381 1.61217C3.06342 1.52695 2.90304 1.48024 2.73883 1.47677C2.57463 1.4733 2.41242 1.51318 2.26854 1.5924C2.12467 1.67162 2.00423 1.78737 1.91937 1.92798C1.8345 2.0686 1.78821 2.2291 1.78516 2.39331Z"
+				fill="currentColor"
+				stroke="currentColor"
+				strokeWidth="1.86819"
+				strokeLinecap="round"
+				strokeLinejoin="round"
+			/>
+		</svg>
+	);
+}
+
+export function ExternalArrowIcon({ ...props }) {
+	return (
+		<svg xmlns="http://www.w3.org/2000/svg" width="12" height="13" viewBox="0 0 12 13" fill="none" {...props}>
+			<g clipPath="url(#clip0_3508_58578)">
+				<path
+					d="M2.64645 9.14645L2.29289 9.5L3 10.2071L3.35355 9.85355L2.64645 9.14645ZM9.35355 3.85355C9.54882 3.65829 9.54882 3.34171 9.35355 3.14645C9.15829 2.95118 8.84171 2.95118 8.64645 3.14645L9.35355 3.85355ZM3.35355 9.85355L9.35355 3.85355L8.64645 3.14645L2.64645 9.14645L3.35355 9.85355Z"
+					fill="currentColor"
+				/>
+				<path d="M4.125 3.5H9V8.375" stroke="currentColor" strokeLinecap="square" />
+			</g>
+			<defs>
+				<clipPath id="clip0_3508_58578">
+					<rect width="12" height="12" fill="currentColor" transform="translate(0 0.5)" />
+				</clipPath>
+			</defs>
+		</svg>
+	);
+}
+
+export function TealCheck({ ...props }) {
+	return (
+		<svg width="100%" height="100%" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg" {...props}>
+			<rect width="18" height="18" rx="4.5" fill="#00F2D4" />
+			<rect x="0.5" y="0.5" width="17" height="17" rx="4" stroke="#252929" strokeOpacity="0.4" />
+			<g clipPath="url(#clip0_4391_12212)">
+				<path d="M5.13281 9.70312L7.59375 12.1641L13.2188 6.53906" stroke="#252929" strokeWidth="1.125" strokeLinecap="round" strokeLinejoin="round" />
+			</g>
+			<defs>
+				<clipPath id="clip0_4391_12212">
+					<rect width="11.25" height="11.25" fill="white" transform="translate(3.375 3.375)" />
+				</clipPath>
+			</defs>
+		</svg>
+	);
+}
+
+export function FAQIcon({ ...props }) {
+	return (
+		<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 26 25" fill="none" {...props}>
+			<rect x="0.5" width="25" height="25" rx="12.5" fill="#1E2323" />
+			<path d="M18.0898 12.502L7.90466 12.502" stroke="#00F2D4" strokeWidth="0.925926" />
+			<path d="M12.9941 7.4082L12.9941 17.5934" stroke="#00F2D4" strokeWidth="0.925926" />
+		</svg>
+	);
+}
diff --git a/src/components/global/header/Header.tsx b/src/components/global/header/Header.tsx
new file mode 100644
index 00000000..c43922ed
--- /dev/null
+++ b/src/components/global/header/Header.tsx
@@ -0,0 +1,98 @@
+import useIsBelowBreakpoint from "../../../hooks/useIsBelowBreakpoint";
+import highlightTextContent from "../../../utils/highlightTextContent";
+import { ArrowRightIcon } from "../../global/SiteIcons";
+import Logo from "../../global/Logo";
+import HeaderSubmenu from "../../global/header/HeaderSubmenu";
+import HeaderNavLink from "../../global/header/HeaderNavLink";
+import HeaderButtons from "../../global/header/HeaderButtons";
+import HeaderBurgerButton from "../../global/header/HeaderBurgerButton";
+
+import { useLocation } from '@docusaurus/router';
+
+import clsx from "clsx";
+import React, { useEffect, useState } from "react";
+
+type HeaderProps = {
+	options: any;
+};
+
+export default function Header({ options: { header } }: HeaderProps) {
+	const { nav = { items: [] }, ctas, announcement_banner } = header;
+	const contextTheme = "black"; // Defaulting theme, adjust as needed
+	const handleCloseSubmenu = () => { /* Dummy function or manage locally if needed for HeaderSubmenu */ };
+
+	const isBelowDesktop = useIsBelowBreakpoint(1024);
+	const location = useLocation();
+	const hasNavLinks = nav?.items?.length > 0 && nav?.items[0]?.link?.url?.length > 0;
+
+	return (
+		<>
+			{/* <AnnouncementBanner {...announcement_banner} location={location} /> */}
+
+			<div
+				className="sticky inset-x-0 top-0 z-[101] w-full font-openSauceTwo"
+				onMouseLeave={handleCloseSubmenu}
+			>
+				<header
+					className={clsx(
+						"relative z-10 flex h-[var(--ifm-navbar-height)] w-full transition-shadow duration-300",
+						contextTheme === "black" ? "bg-grey-16 text-white" : "bg-grey-1 text-black"
+					)}
+				>
+					<div className="container !max-w-[76rem] flex flex-1 items-center justify-between py-3 sm:py-4">
+						<a
+							href="/"
+							aria-label="Back to Home"
+							className="block h-5 transition-opacity duration-200 hover:opacity-70 sm:h-[1.3125rem]"
+							onMouseEnter={handleCloseSubmenu}
+						>
+							<Logo className="w-auto will-change-transform text-white" />
+						</a>
+
+						{hasNavLinks && !isBelowDesktop && (
+							<nav>
+								<ul className="hidden items-center lg:flex">
+									{nav?.items?.map(({ link, has_submenu }, index) => <HeaderNavLink key={link?.title} link={link} has_submenu={has_submenu} index={index} />)}
+								</ul>
+							</nav>
+						)}
+
+						{!isBelowDesktop && <HeaderButtons ctas={ctas} />}
+
+						{isBelowDesktop && <HeaderBurgerButton />}
+					</div>
+				</header>
+
+				<HeaderSubmenu navItems={nav?.items} className="absolute inset-x-0 top-full h-[calc(100vh-var(--header-height))] w-full overflow-scroll" />
+			</div>
+		</>
+	);
+}
+
+type AnnouncementBannerProps = any & { router: any };
+
+function AnnouncementBanner({ icon, link, homepage_only = false, location }: AnnouncementBannerProps) {
+	const isMobile = useIsBelowBreakpoint(640);
+	const isHomePage = location.pathname === "/";
+
+	const highlightedText = isMobile && link?.title?.length > 32 ? `${link?.title.slice(0, 32)}...` : highlightTextContent(link?.title, "text-white");
+
+	if (homepage_only && !isHomePage) return null;
+
+	return (
+		<a
+			href={link?.url}
+			target={link?.target}
+			className="group sticky top-0 w-full z-[101] block border-b border-grey-13 bg-grey-16 py-2.5 text-white transition-colors duration-200 hover:bg-grey-13"
+		>
+			<div className="container">
+				<div className="flex items-center justify-center gap-x-2.5">
+					{icon?.url && <img src={icon.url || icon.src} className="shrink-0" />}
+					<p className="text-13 text-grey-6" dangerouslySetInnerHTML={{ __html: highlightedText }} />
+					{!isMobile && <div className="h-3.5 w-px shrink-0 bg-grey-13" />}
+					<ArrowRightIcon className="w-3 shrink-0 text-grey-6 transition-transform duration-200 group-hover:translate-x-0.5" />
+				</div>
+			</div>
+		</a>
+	);
+}
diff --git a/src/components/global/header/HeaderBurgerButton.tsx b/src/components/global/header/HeaderBurgerButton.tsx
new file mode 100644
index 00000000..2fa31b83
--- /dev/null
+++ b/src/components/global/header/HeaderBurgerButton.tsx
@@ -0,0 +1,45 @@
+import React from "react";
+import { motion } from "motion/react";
+import { useNavbarMobileSidebar } from '@docusaurus/theme-common/internal'; // Use Docusaurus hook
+
+export default function HeaderBurgerButton() {
+	const docusaurusMobileSidebar = useNavbarMobileSidebar(); // Docusaurus hook for its mobile sidebar state
+
+	const iconProps = {
+		initial: { opacity: 0 },
+		animate: { opacity: 1 },
+		transition: { duration: 0.6 },
+	};
+
+	const handleClick = () => {
+		console.log("Burger clicked. Toggling Docusaurus mobile sidebar. Was shown:", docusaurusMobileSidebar.shown);
+		docusaurusMobileSidebar.toggle(); // Simply toggle the Docusaurus mobile sidebar
+	};
+
+	// Icon should be in "X" (close) state if Docusaurus nav is open
+	const isNavOpen = docusaurusMobileSidebar.shown;
+
+	return (
+		<motion.button
+			aria-label="Navigation Menu"
+			initial={{ opacity: 0 }}
+			animate={{ opacity: 1 }}
+			transition={{ duration: 0.4, delay: 0.2 }}
+			className="flex group flex-col relative z-[9999] items-center justify-center w-8 h-8"
+			onClick={handleClick}
+		>
+			<motion.span
+				{...iconProps}
+				className={`absolute block w-full h-0.5 bg-white transform transition-all duration-300 ${isNavOpen ? "rotate-[135deg]" : "-translate-y-2"}`}
+			/>
+			<motion.span
+				{...iconProps}
+				className={`absolute block w-full h-0.5 bg-white transform transition-all duration-300 ${isNavOpen ? "opacity-0" : "opacity-100"}`}
+			/>
+			<motion.span
+				{...iconProps}
+				className={`absolute block w-full h-0.5 bg-white transform transition-all duration-300 ${isNavOpen ? "-rotate-[135deg]" : "translate-y-2"}`}
+			/>
+		</motion.button>
+	);
+}
diff --git a/src/components/global/header/HeaderButtons.tsx b/src/components/global/header/HeaderButtons.tsx
new file mode 100644
index 00000000..7f3a0601
--- /dev/null
+++ b/src/components/global/header/HeaderButtons.tsx
@@ -0,0 +1,50 @@
+import React from 'react';
+import { Button } from "../../elements/buttons/Button";
+
+// Explicitly import the type for the button prop if available, or define locally
+// Assuming ButtonProps is not exported from Button.tsx, let's define a local version:
+type ButtonComponentButtonProp = {
+	background_color?: "black" | "white" | "grey-13" | "grey-11" | "white/5" | "grey-1" | "grey-2";
+	type?: "solid" | "outline";
+	size?: "small" | "medium";
+};
+
+type HeaderButtonsProps = {
+	ctas: any;
+	theme?: string;
+	handleCloseSubmenu?: () => void;
+};
+
+export default function HeaderButtons({ ctas, theme = "black", handleCloseSubmenu = () => {} }: HeaderButtonsProps) {
+	const { primary_cta, secondary_cta } = ctas || {};
+
+	if (!primary_cta?.url && !secondary_cta?.url) return null;
+
+	const primaryButtonProps: ButtonComponentButtonProp = {
+		size: "small",
+		background_color: theme === "black" ? "white" : "black",
+	};
+
+	const secondaryButtonProps: ButtonComponentButtonProp = {
+		size: "small",
+		background_color: theme === "black" ? "grey-13" : "grey-2",
+	};
+
+	return (
+		<div className="flex items-center gap-x-2.5 lg:gap-x-3 xl:gap-x-4" onMouseEnter={handleCloseSubmenu}>
+			{secondary_cta?.url && (
+				<Button
+					link={secondary_cta}
+					button={secondaryButtonProps}
+					className="hidden sm:block"
+				/>
+			)}
+			{primary_cta?.url && (
+				<Button 
+					link={primary_cta} 
+					button={primaryButtonProps} 
+				/>
+			)}
+		</div>
+	);
+}
diff --git a/src/components/global/header/HeaderNavLink.tsx b/src/components/global/header/HeaderNavLink.tsx
new file mode 100644
index 00000000..524ae7b1
--- /dev/null
+++ b/src/components/global/header/HeaderNavLink.tsx
@@ -0,0 +1,73 @@
+import React, { useState } from "react";
+import HeaderSubmenu from "./HeaderSubmenu";
+import { motion } from "motion/react";
+import Link from "@docusaurus/Link";
+import clsx from "clsx";
+
+type HeaderNavLinkProps = {
+	link: any;
+	has_submenu: boolean;
+	index: number;
+	activeMenuItem?: number | null;
+	setActiveMenuItem?: (index: number | null) => void;
+	isSubmenuOpen?: boolean;
+	setIsSubmenuOpen?: (isOpen: boolean) => void;
+	theme?: string;
+};
+
+export default function HeaderNavLink({ link, has_submenu, index, activeMenuItem, setActiveMenuItem, isSubmenuOpen, setIsSubmenuOpen, theme = "black" }: HeaderNavLinkProps) {
+	const handleSubmenuToggle = (itemIndex) => {
+		if (setActiveMenuItem && setIsSubmenuOpen) {
+			if (activeMenuItem === itemIndex && isSubmenuOpen) {
+				setIsSubmenuOpen(false);
+				setActiveMenuItem(null);
+			} else {
+				setIsSubmenuOpen(true);
+				setActiveMenuItem(itemIndex);
+			}
+		}
+	};
+
+	const handleCloseSubmenu = () => {
+		if (setIsSubmenuOpen && setActiveMenuItem) {
+			setIsSubmenuOpen(false);
+			setActiveMenuItem(null);
+		}
+	};
+
+	const linkClasses = clsx(
+		"nav-link relative block whitespace-nowrap px-2.5 py-3.5 text-13 font-medium transition-opacity duration-200 hover:opacity-70 lg:px-3 xl:px-4",
+		{
+			"opacity-70": activeMenuItem === index && isSubmenuOpen,
+		}
+	);
+
+	const submenuToggleClasses = clsx(
+		linkClasses,
+		"flex cursor-pointer items-center gap-x-1.5",
+		{
+			"is-active": activeMenuItem === index && isSubmenuOpen,
+		}
+	);
+
+	const Tag = has_submenu ? "button" : Link;
+
+	const commonProps = {
+		className: has_submenu ? submenuToggleClasses : linkClasses,
+		...(has_submenu ? { onClick: () => handleSubmenuToggle(index) } : { href: link?.url, target: link?.target, onClick: handleCloseSubmenu }),
+	};
+
+	return (
+		<motion.li initial={{ opacity: 0, y: -5 }} animate={{ opacity: 1, y: 0 }} transition={{ duration: 0.3, delay: index * 0.05 }}>
+			<Tag {...commonProps}>
+				{link?.title}
+				{has_submenu && (
+					<svg className={`mt-px h-2 w-2 shrink-0 transition-transform duration-300 ${activeMenuItem === index && isSubmenuOpen ? "rotate-180" : ""}`} viewBox="0 0 8 8" fill="none" xmlns="http://www.w3.org/2000/svg">
+						<path d="M4 5L1 2" stroke={theme === "black" ? "white" : "#141414"} strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round" />
+						<path d="M7 2L4 5" stroke={theme === "black" ? "white" : "#141414"} strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round" />
+					</svg>
+				)}
+			</Tag>
+		</motion.li>
+	);
+}
diff --git a/src/components/global/header/HeaderSubmenu.tsx b/src/components/global/header/HeaderSubmenu.tsx
new file mode 100644
index 00000000..8b322690
--- /dev/null
+++ b/src/components/global/header/HeaderSubmenu.tsx
@@ -0,0 +1,42 @@
+import React from "react";
+import { AnimatePresence, motion } from "motion/react";
+import ThreeColumnSubmenu from "./submenuLayouts/ThreeColumnSubmenu";
+import clsx from "clsx";
+
+type HeaderSubmenuProps = {
+	navItems: any;
+	className?: string;
+	isSubmenuOpen?: boolean;
+	activeMenuItem?: number | null;
+	theme?: string;
+};
+
+export default function HeaderSubmenu({ navItems, className, isSubmenuOpen, activeMenuItem, theme = "black" }: HeaderSubmenuProps) {
+	const activeItemData = activeMenuItem !== null && navItems?.[activeMenuItem]?.has_submenu ? navItems[activeMenuItem] : null;
+	const SubmenuComponent = SUBMENU_COMPONENTS[activeItemData?.submenu_layout] || null;
+
+	return (
+		<AnimatePresence>
+			{isSubmenuOpen && activeItemData && SubmenuComponent && (
+				<motion.div
+					key={`submenu-${activeMenuItem}`}
+					initial={{ opacity: 0 }}
+					animate={{ opacity: 1 }}
+					exit={{ opacity: 0 }}
+					transition={{ duration: 0.3, ease: "easeInOut" }}
+					className={clsx(
+						"absolute inset-x-0 top-full",
+						theme === "black" ? "bg-grey-16 text-white" : "bg-grey-1 text-grey-16",
+						className
+					)}
+				>
+					<SubmenuComponent {...activeItemData} theme={theme} />
+				</motion.div>
+			)}
+		</AnimatePresence>
+	);
+}
+
+const SUBMENU_COMPONENTS = {
+	"3col": ThreeColumnSubmenu,
+};
diff --git a/src/components/global/header/MobileSubmenu.tsx b/src/components/global/header/MobileSubmenu.tsx
new file mode 100644
index 00000000..c9ba3c00
--- /dev/null
+++ b/src/components/global/header/MobileSubmenu.tsx
@@ -0,0 +1,42 @@
+import { CaretDownIcon } from "../../../components/global/SiteIcons";
+import ThreeColumnSubmenu from "../../../components/global/header/submenuLayouts/ThreeColumnSubmenu";
+import { motion, AnimatePresence } from "motion/react";
+import React, { useState } from "react";
+
+type MobileSubmenuProps = {
+	navItem: any;
+	buttonClasses?: string;
+};
+
+export default function MobileSubmenu({ navItem, buttonClasses = "" }: MobileSubmenuProps) {
+	const [isOpen, setIsOpen] = useState(false);
+
+	const transition = { duration: 0.3, ease: [0.5, 0.16, 0.1, 1] };
+
+	const contentInitial = {
+		height: 0,
+		opacity: 0,
+	};
+
+	const contentAnimate = {
+		height: "auto",
+		opacity: 1,
+	};
+
+	return (
+		<div>
+			<button type="button" aria-label="Toggle submenu" className={`flex items-center gap-x-3 text-left ${buttonClasses}`} onClick={() => setIsOpen(!isOpen)}>
+				<div className="flex-1">{navItem?.link?.title}</div>
+				<CaretDownIcon className={`w-4 text-grey-8 transition-transform duration-200 ${isOpen && "rotate-180"}`} />
+			</button>
+
+			<AnimatePresence>
+				{isOpen && (
+					<motion.div initial={contentInitial} animate={contentAnimate} exit={contentInitial} transition={transition}>
+						<ThreeColumnSubmenu {...navItem?.submenu?.three_column_submenu} />
+					</motion.div>
+				)}
+			</AnimatePresence>
+		</div>
+	);
+}
diff --git a/src/components/global/header/submenuLayouts/ThreeColumnSubmenu.tsx b/src/components/global/header/submenuLayouts/ThreeColumnSubmenu.tsx
new file mode 100644
index 00000000..2869ade0
--- /dev/null
+++ b/src/components/global/header/submenuLayouts/ThreeColumnSubmenu.tsx
@@ -0,0 +1,220 @@
+import useResourcePreviewData from "../../../../hooks/useResourcePreviewData";
+import Link from "@docusaurus/Link";
+import clsx from "clsx";
+import React from "react";
+import { ExternalArrowIcon } from "../../../../components/global/SiteIcons";
+
+export type ThreeColumnSubmenuProps = {
+	title?: string;
+	title_link?: any;
+	columns?: any[];
+	theme?: string;
+	handleCloseSubmenu?: () => void;
+	handleCloseMobileNav?: () => void;
+	left_column?: { submenu_modules?: any[] };
+	middle_column?: { submenu_modules?: any[] };
+	right_column?: { submenu_modules?: any[] };
+};
+
+export default function ThreeColumnSubmenu({ title, title_link, columns, theme = "black", handleCloseSubmenu = () => {}, handleCloseMobileNav = () => {}, left_column = {}, middle_column = {}, right_column = {} }: ThreeColumnSubmenuProps) {
+	const hasSubmenuModules = (column: any) => column?.submenu_modules?.length > 0;
+
+	const hasTitle = title || title_link?.title;
+	const TitleLink = title_link?.url ? Link : "div";
+
+	return (
+		<div className="grid grid-cols-12 gap-x-responsive py-10 text-sm">
+			{hasTitle && (
+				<div className="col-span-3">
+					<TitleLink
+						href={title_link?.url}
+						target={title_link?.target}
+						className={clsx("mb-4 block text-lg font-medium", title_link?.url && "hover:opacity-70")}
+						onClick={() => { handleCloseSubmenu(); handleCloseMobileNav(); }}
+					>
+						{title_link?.title || title}
+					</TitleLink>
+				</div>
+			)}
+			{columns?.map((column, index) => (
+				<div key={`col-${index}`} className={clsx("col-span-3", !hasTitle && index === 0 && "col-start-1")}>
+					<Column column={column} theme={theme} handleCloseSubmenu={handleCloseSubmenu} handleCloseMobileNav={handleCloseMobileNav} />
+				</div>
+			))}
+		</div>
+	);
+}
+
+function Column({ column, theme, handleCloseSubmenu, handleCloseMobileNav }) {
+	return (
+		<ul className="flex flex-col gap-y-1.5">
+			{column?.heading && <li className="mb-1.5 text-[0.8125rem] font-medium leading-tight text-grey-8">{column.heading}</li>}
+			{column?.items?.map((item, index) => (
+				<Item key={`item-${index}`} item={item} theme={theme} handleCloseSubmenu={handleCloseSubmenu} handleCloseMobileNav={handleCloseMobileNav} />
+			))}
+		</ul>
+	);
+}
+
+function Item({ item, theme, handleCloseSubmenu, handleCloseMobileNav }) {
+	return (
+		<li>
+			<ItemLink item={item} theme={theme} handleCloseSubmenu={handleCloseSubmenu} handleCloseMobileNav={handleCloseMobileNav}>
+				{item.icon?.url && <img src={item.icon.url} alt={item.icon.alt || ""} className="mr-2 h-4 w-4" />}
+				{item.title}
+			</ItemLink>
+		</li>
+	);
+}
+
+function ItemLink({ item, children, theme, handleCloseSubmenu, handleCloseMobileNav }) {
+	const commonClasses = clsx("flex items-center rounded px-2 py-1.5 transition-colors duration-200", {
+		"text-grey-8 hover:text-white": item.dimmed,
+	});
+
+	const themeClasses = theme === "black" ? "hover:bg-grey-13" : "hover:bg-grey-2";
+
+	const onClickActions = () => {
+		handleCloseSubmenu();
+		handleCloseMobileNav();
+	};
+
+	return item.url ? (
+		<Link href={item.url} target={item.target} className={`${commonClasses} ${themeClasses}`} onClick={onClickActions}>
+			{children}
+		</Link>
+	) : (
+		<div className={`${commonClasses} cursor-default`}>{children}</div>
+	);
+}
+
+type ModuleRendererProps = {
+	modules: any[];
+	handleCloseAll: () => void;
+};
+
+function ModuleRenderer({ modules = [], handleCloseAll }: ModuleRendererProps) {
+	if (!modules) return null;
+
+	const ModuleComponents = {
+		link_list: LinkListModule,
+		featured_resource: FeaturedResourceModule,
+		card_cta: CardCtaModule,
+		tile_cta: TileCtaModule,
+	};
+
+	return (
+		<div className="w-full space-y-8">
+			{modules.map((submenuModule, index) => {
+				const Component = ModuleComponents[submenuModule.acf_fc_layout];
+
+				return Component ? <Component key={`module-${index}`} {...submenuModule} handleCloseAll={handleCloseAll} /> : null;
+			})}
+		</div>
+	);
+}
+
+type ModuleProps = any & { handleCloseAll: () => void };
+
+function LinkListModule({ link_list = {}, handleCloseAll }: ModuleProps) {
+	const { subheading = "", links = [] } = link_list;
+
+	return (
+		<div className="space-y-6">
+			{subheading && <div className="text-13-mobHeading">{subheading}</div>}
+
+			{links.length > 0 && (
+				<ul className="space-y-6">
+					{links.map(
+						({ link, icon, description = "" }) =>
+							link?.url && (
+								<li key={link?.title}>
+									<a href={link?.url} target={link?.target} className="group flex items-start gap-x-3" onClick={handleCloseAll}>
+										{icon?.url && <img src={icon?.url} alt={icon?.alt} className="w-6" />}
+
+										<div className="block space-y-1 leading-none">
+											<div className="inline-flex gap-x-2 transition-colors duration-200 group-hover:text-teal">
+												<span className="text-13-mobHeading !leading-none" dangerouslySetInnerHTML={{ __html: link?.title }} />
+												{link?.target === "_blank" && <ExternalArrowIcon className="w-3" />}
+											</div>
+
+											{description && (
+												<div className="text-13-mobSubText">{description}</div>
+											)}
+										</div>
+									</a>
+								</li>
+							)
+					)}
+				</ul>
+			)}
+		</div>
+	);
+}
+
+function FeaturedResourceModule({ featured_resource, handleCloseAll }: ModuleProps) {
+	const { subheading = "", resource } = featured_resource;
+	const { resourceType } = useResourcePreviewData(resource);
+
+	return (
+		<div className="space-y-5">
+			{subheading && <div className="text-13-mobHeading">{subheading}</div>}
+
+			{resource?.permalink ? (
+				<a href={resource?.permalink} target={resource?.permalink_target} className="group block space-y-8" onClick={handleCloseAll}>
+					<div className="w-full">
+						<div className="text-13-subText transition-colors duration-200 group-hover:text-teal">
+							{resource?.post_title}
+						</div>
+
+						<div className="mt-4 inline-flex gap-x-2">
+							<div className="rounded bg-grey-12 px-2 py-1 text-[0.6875rem] text-white">{resourceType}</div>
+
+							{resource?.categories?.length > 0 && (
+								<div className="rounded bg-grey-12 px-2 py-1 text-[0.6875rem] text-white">{resource?.categories[0]?.name}</div>
+							)}
+						</div>
+					</div>
+
+					<div className="relative aspect-[300/170] overflow-hidden rounded transition-opacity duration-200 group-hover:opacity-80">
+						<img src={resource?.featured_image?.src} alt={resource?.featured_image?.alt || resource?.post_title} className="w-full object-cover" />
+					</div>
+				</a>) : null}
+		</div>
+	);
+}
+
+function CardCtaModule({ card_cta, handleCloseAll }: ModuleProps) {
+	const { link, asset } = card_cta;
+
+	return link?.url ? (
+		<a
+			href={link?.url}
+			target={link?.target}
+			className="group relative block aspect-[300/220] w-full overflow-hidden rounded"
+			onClick={handleCloseAll}
+		>
+			<img src={asset?.url} alt={asset?.alt} className="w-full object-cover transition-opacity duration-200 group-hover:opacity-80" />
+
+			<div className="absolute left-3 top-3 rounded bg-grey-12 px-2 py-1 text-[0.8125rem] leading-[1.5] tracking-[0.26px] text-white">{link?.title}</div>
+		</a>
+	) : null;
+}
+
+function TileCtaModule({ tile_cta, handleCloseAll }: ModuleProps) {
+	const { link, asset, description = "" } = tile_cta;
+
+	return link?.url ? (
+		<a href={link?.url} target={link?.target} className="group flex flex-col-reverse gap-y-6">
+			<div className="relative block aspect-[348/220] w-full overflow-hidden rounded">
+				<img src={asset?.url} alt={asset?.alt} className="w-full object-cover" />
+			</div>
+
+			<div className="space-y-1 leading-none">
+				<div className="text-13-mobHeading">{link?.title}</div>
+
+				{description && <div className="text-13-mobSubText">{description}</div>}
+			</div>
+		</a>
+	) : null;
+}
diff --git a/src/css/_fonts.scss b/src/css/_fonts.scss
new file mode 100644
index 00000000..45a88e5d
--- /dev/null
+++ b/src/css/_fonts.scss
@@ -0,0 +1,15 @@
+@font-face {
+	font-family: "OpenSauceTwo";
+	src: url("/fonts/OpenSauceTwo-Regular.woff2") format("woff2");
+	font-weight: 400;
+	font-style: normal;
+	font-display: swap;
+}
+
+@font-face {
+	font-family: "OpenSauceTwo";
+	src: url("/fonts/OpenSauceTwo-Medium.woff2") format("woff2");
+	font-weight: 500;
+	font-style: normal;
+	font-display: swap;
+}
diff --git a/src/css/_mixins.scss b/src/css/_mixins.scss
new file mode 100644
index 00000000..b51652d3
--- /dev/null
+++ b/src/css/_mixins.scss
@@ -0,0 +1,23 @@
+@use "sass:math";
+
+@function between($from, $to, $fromWidth, $toWidth) {
+	$slope: math.div($from - $to, $fromWidth - $toWidth);
+	$base: $to - $slope * $toWidth;
+	@return calc(#{$base} + #{100vw * $slope});
+}
+
+@mixin clamp($property, $from, $to, $fromWidth, $toWidth) {
+	#{$property}: $from;
+
+	@media (min-width: $fromWidth) {
+		#{$property}: between($from, $to, $fromWidth, $toWidth);
+	}
+
+	@media (min-width: $toWidth) {
+		#{$property}: $to;
+	}
+}
+
+@function rem($size) {
+	@return math.div($size, 16px) * 1rem;
+}
diff --git a/src/css/_navbar.scss b/src/css/_navbar.scss
new file mode 100644
index 00000000..c0e896c3
--- /dev/null
+++ b/src/css/_navbar.scss
@@ -0,0 +1,15 @@
+.navbar {
+
+  button {
+    @apply appearance-none border-none bg-transparent font-openSauceTwo;
+  }
+
+  a {
+    @apply font-openSauceTwo;
+    text-decoration: none!important;
+  }
+
+  ul {
+    @apply p-0 m-0 list-none;
+  }
+}
\ No newline at end of file
diff --git a/src/css/_typography.scss b/src/css/_typography.scss
new file mode 100644
index 00000000..7222f06d
--- /dev/null
+++ b/src/css/_typography.scss
@@ -0,0 +1,341 @@
+@use "./_mixins.scss" as *;
+
+$xxs: rem(400px);
+$xs: rem(480px);
+$sm: rem(640px);
+$md: rem(768px);
+$lg: rem(1024px);
+$xl: rem(1280px);
+$xxl: rem(1440px);
+$responsive_size_modifier: 0.825;
+$responsive_size_modifier_large: 0.5;
+
+html {
+	-webkit-font-smoothing: antialiased;
+	-moz-osx-font-smoothing: grayscale;
+	scroll-behavior: smooth;
+	@apply bg-grey-16 font-openSauceTwo;
+}
+
+// Headings
+.text-h1 {
+	@include clamp("font-size", rem(58px * $responsive_size_modifier_large), rem(56px), $sm, $xl);
+	@apply leading-[1.2] tracking-[-1.68px] sm:leading-[1.1];
+}
+
+.text-h2 {
+	@include clamp("font-size", rem(52px * $responsive_size_modifier_large), rem(48px), $sm, $xl);
+	@apply leading-[1.2] tracking-[-1.44px] sm:leading-[1.15];
+}
+
+.text-h2-mobLarger {
+	@include clamp("font-size", rem(64px * $responsive_size_modifier_large), rem(48px), $sm, $xl);
+	@apply leading-[1.2] tracking-[-1.44px] sm:leading-[1.15];
+}
+
+.text-h3 {
+	@include clamp("font-size", rem(44px * $responsive_size_modifier_large), rem(32px), $sm, $xl);
+	@apply leading-[1.3] tracking-[-0.32px] sm:leading-[1.2];
+}
+
+.text-h3-mobSmaller {
+	@include clamp("font-size", rem(36px * $responsive_size_modifier_large), rem(32px), $sm, $xl);
+	@apply leading-[1.4] tracking-[-0.32px] sm:leading-[1.2];
+}
+
+.text-h4 {
+	@include clamp("font-size", rem(40px * $responsive_size_modifier_large), rem(28px), $sm, $xl);
+	@apply leading-[1.2] tracking-[-0.28px];
+}
+
+.text-h5 {
+	@include clamp("font-size", rem(38px * $responsive_size_modifier_large), rem(26px), $sm, $xl);
+	@apply leading-[1.2] tracking-[-0.26px];
+}
+
+.text-h5-mobSmaller {
+	@include clamp("font-size", rem(34px * $responsive_size_modifier_large), rem(26px), $sm, $xl);
+	@apply leading-[1.4] tracking-[-0.26px] sm:leading-[1.2];
+}
+
+.text-h6 {
+	@include clamp("font-size", rem(36px * $responsive_size_modifier_large), rem(20px), $sm, $xl);
+	@apply leading-[1.28] tracking-[0.26px];
+}
+
+.text-h6-mobSmaller {
+	@include clamp("font-size", rem(32px * $responsive_size_modifier_large), rem(20px), $sm, $xl);
+	@apply leading-[1.28] tracking-[0.26px];
+}
+
+.text-h7 {
+	@include clamp("font-size", rem(32px * $responsive_size_modifier_large), rem(18px), $sm, $xl);
+	@apply leading-[1.5] tracking-[0.18px];
+}
+
+// Body
+
+.text-38 {
+	@include clamp("font-size", rem(48px * $responsive_size_modifier_large), rem(38px), $sm, $xl);
+	@apply leading-[1.18] tracking-[-0.38px];
+}
+
+.text-36 {
+	@include clamp("font-size", rem(44px * $responsive_size_modifier_large), rem(36px), $sm, $xl);
+	@apply leading-[1.21] tracking-[-0.36px];
+}
+
+.text-24-quote {
+	@include clamp("font-size", rem(36px * $responsive_size_modifier_large), rem(24px), $sm, $xl);
+	@apply leading-[1.5] tracking-[-0.24px];
+}
+
+.text-20 {
+	@include clamp("font-size", rem(30px * $responsive_size_modifier_large), rem(20px), $sm, $xl);
+	@apply leading-[1.4] tracking-[0.2px] sm:leading-[1.36];
+}
+
+.text-20-mobLarger {
+	@include clamp("font-size", rem(36px * $responsive_size_modifier_large), rem(20px), $sm, $xl);
+	@apply leading-[1.5] tracking-[0.2px] sm:leading-[1.36];
+}
+
+.text-18 {
+	@include clamp("font-size", rem(30px * $responsive_size_modifier_large), rem(18px), $sm, $xl);
+	@apply leading-[1.4] tracking-[0.18px] sm:leading-[1.28];
+}
+
+.text-18-mobSmaller {
+	@include clamp("font-size", rem(26px * $responsive_size_modifier_large), rem(18px), $sm, $xl);
+	@apply leading-[1.4] tracking-[0.18px] sm:leading-[1.28];
+}
+
+.text-18-mobLarger {
+	@include clamp("font-size", rem(32px * $responsive_size_modifier_large), rem(18px), $sm, $xl);
+	@apply leading-[1.4] tracking-[0.18px] sm:leading-[1.28];
+}
+
+.text-17 {
+	@include clamp("font-size", rem(30px * $responsive_size_modifier_large), rem(17px), $sm, $xl);
+	@apply leading-[1.48] tracking-[0.17px];
+}
+
+.text-17-article {
+	@include clamp("font-size", rem(30px * $responsive_size_modifier_large), rem(17px), $sm, $xl);
+	@apply leading-[1.48] tracking-[0.17px];
+}
+
+.text-16 {
+	@include clamp("font-size", rem(28px * $responsive_size_modifier_large), rem(16px), $sm, $xl);
+	@apply leading-[1.5] tracking-[0.16px];
+}
+
+.text-16-mobSmaller {
+	@include clamp("font-size", rem(26px * $responsive_size_modifier_large), rem(16px), $sm, $xl);
+	@apply leading-[1.5] tracking-[0.16px];
+}
+
+.text-15 {
+	@include clamp("font-size", rem(26px * $responsive_size_modifier_large), rem(15px), $sm, $xl);
+	@apply leading-[1.4] tracking-[0.15px];
+}
+
+.text-15-mobSmaller {
+	@include clamp("font-size", rem(24px * $responsive_size_modifier_large), rem(15px), $sm, $xl);
+	@apply leading-[1.4] tracking-[0.15px];
+}
+
+.text-15-mono {
+	@include clamp("font-size", rem(22px * $responsive_size_modifier_large), rem(15px), $sm, $xl);
+	@apply font-mono leading-[1.5] tracking-[0.15px];
+}
+
+.text-14 {
+	@include clamp("font-size", rem(26px * $responsive_size_modifier_large), rem(14px), $sm, $xl);
+	@apply leading-[1.5] tracking-[0.28px];
+}
+
+.text-14-mobSmaller {
+	@include clamp("font-size", rem(24px * $responsive_size_modifier_large), rem(14px), $sm, $xl);
+	@apply leading-[1.5] tracking-[0.28px];
+}
+
+.text-13 {
+	@include clamp("font-size", rem(24px * $responsive_size_modifier_large), rem(13px), $sm, $xl);
+	@apply leading-[1.4] tracking-[0.26px];
+}
+
+.text-12 {
+	@include clamp("font-size", rem(24px * $responsive_size_modifier_large), rem(12px), $sm, $xl);
+	@apply leading-[1.5] tracking-[0.12px];
+}
+
+.text-12-footer {
+	@include clamp("font-size", rem(24px * $responsive_size_modifier_large), rem(12px), $sm, $xl);
+	@apply leading-none tracking-[0.24px];
+}
+
+.text-11 {
+	@include clamp("font-size", rem(20px * $responsive_size_modifier_large), rem(11px), $sm, $xl);
+	@apply leading-[1.5] tracking-[0.11px];
+}
+
+// Prose
+.prose {
+	max-width: 100%;
+	color: inherit;
+	// Todo - text size on parent so light can be too?
+	p {
+		@apply text-17-article;
+	}
+	a {
+		@apply font-medium text-teal no-underline transition-opacity duration-200 hover:opacity-80;
+	}
+	ul {
+		@apply mb-10 mt-10 list-none space-y-10 p-0 first:mt-0 last:mb-0;
+		li {
+			@apply text-17-article relative m-0 pl-6;
+			&::before {
+				content: "";
+				@apply text-17-article absolute left-0 top-0 h-[1.48em] w-[0.1875rem] rounded-full bg-teal;
+			}
+		}
+	}
+	h2,
+	h3,
+	h4,
+	h5,
+	h6 {
+		@apply mt-10 text-inherit first:mt-0;
+		font-weight: inherit;
+	}
+	h2 {
+		@apply text-h2;
+	}
+	h3 {
+		@apply text-h3;
+	}
+	h4 {
+		@apply text-h4;
+	}
+	h5 {
+		@apply text-h5;
+	}
+	h6 {
+		@apply text-h6;
+	}
+}
+
+// .light {
+// 	p {
+// 		@apply leading-[1.65];
+// 	}
+// 	ul {
+// 		li {
+// 			@apply leading-[1.65];
+// 			&::before {
+// 				@apply h-[1.65em] leading-[1.65];
+// 			}
+// 		}
+// 	}
+// }
+
+.prose-16 {
+	p {
+		@apply text-16;
+	}
+	ul {
+		li {
+			@apply text-16;
+			&::before {
+				@apply text-16 h-[1.5em] leading-[1.5];
+			}
+		}
+	}
+	&.prose-16-mobSmaller {
+		p {
+			@apply text-16-mobSmaller;
+		}
+		ul {
+			li {
+				@apply text-16-mobSmaller;
+			}
+		}
+	}
+}
+
+.prose-18 {
+	p {
+		@apply text-18;
+	}
+	ul {
+		li {
+			@apply text-18;
+			&::before {
+				@apply text-18 h-[1.28em] leading-[1.28];
+			}
+		}
+	}
+	&.prose-18-moreLeading {
+		p {
+			@apply leading-[1.5] #{!important};
+		}
+		ul {
+			li {
+				@apply leading-[1.5];
+				&::before {
+					@apply h-[1.5em] leading-[1.5];
+				}
+			}
+		}
+	}
+}
+
+.prose-grey-5 {
+	@apply text-grey-5;
+}
+
+.prose-grey-10 {
+	@apply text-grey-10;
+}
+
+.prose-grey-8 {
+	@apply text-grey-8;
+}
+
+// Mobile Nav
+.text-13-mobHeading {
+	@apply text-[0.9375rem] leading-none tracking-[0.3px] lg:text-[0.8125rem] lg:tracking-[0.26px];
+}
+
+.text-13-mobSubText {
+	@apply text-[0.875rem] leading-[1.5] tracking-[0.28px] lg:text-[0.8125rem] lg:leading-none lg:tracking-[0.26px];
+}
+
+// Misc
+.custom-ul {
+	@apply list-none space-y-3 p-0 sm:space-y-4;
+	li {
+		@apply text-15 relative m-0 pl-3.5;
+		&::before {
+			content: "";
+			@apply text-15 absolute left-0 top-0 h-[1.4em] w-0.5 rounded-full bg-white;
+		}
+	}
+}
+
+.text-15-shrunken {
+	@include clamp("font-size", rem(19.5936px * $responsive_size_modifier_large), rem(11.304px), $sm, $xl);
+	@apply leading-[1.5] tracking-[0.15px];
+}
+
+.text-18-shrunken {
+	@include clamp("font-size", rem(22.608px * $responsive_size_modifier_large), rem(13.565px), $sm, $xl);
+	@apply leading-[1.5] tracking-[0.18px];
+}
+
+.span-opacity {
+	span {
+		@apply text-white;
+	}
+}
diff --git a/src/css/custom.scss b/src/css/custom.scss
new file mode 100644
index 00000000..e69de29b
diff --git a/src/css/globals.scss b/src/css/globals.scss
new file mode 100644
index 00000000..df3a8fe5
--- /dev/null
+++ b/src/css/globals.scss
@@ -0,0 +1,109 @@
+@use "./_fonts.scss";
+@use "./_mixins.scss" as *;
+@use "./_navbar.scss";
+@use "./_typography.scss" as *;
+
+/**
+ * Any CSS included here will be global. The classic template
+ * bundles Infima by default. Infima is a CSS framework designed to
+ * work well for content-centric websites.
+ */
+
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
+
+
+
+.padding-x {
+	@apply px-4;
+
+	@media (min-width: $sm) {
+		@apply px-8;
+	}
+
+	@media (min-width: $md) {
+		@apply px-12;
+	}
+}
+
+// Container
+.container {
+	@apply padding-x mx-auto box-content w-auto max-w-[76rem];
+
+	.container {
+		@apply px-0;
+	}
+
+	&.container-force-width {
+		@apply box-border w-full max-w-[82rem] #{!important};
+	}
+}
+
+
+:root {
+  --ifm-color-primary: #2e8555;
+  --ifm-color-primary-dark: #29784c;
+  --ifm-color-primary-darker: #277148;
+  --ifm-color-primary-darkest: #205d3b;
+  --ifm-color-primary-light: #33925d;
+  --ifm-color-primary-lighter: #359962;
+  --ifm-color-primary-lightest: #3cad6e;
+  --ifm-code-font-size: 95%;
+  --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1);
+  --ifm-font-family-base: 'Open Sauce Two', OpenSauceTwo, system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";
+  --ifm-h1-font-size: 2.25rem;
+  --ifm-navbar-height: 4.0625rem;
+  --ifm-navbar-padding-vertical:0;
+  --ifm-navbar-padding-horizontal:0;
+}
+
+/* For readability concerns, you should choose a lighter palette in dark mode. */
+html[data-theme='dark'] {
+  --ifm-background-color: #02060A;
+  --ifm-background-surface-color: #02060A;
+  /* 131515 */
+  --ifm-color-primary: #00F2D4;
+  --ifm-color-primary-dark: #21af90;
+  --ifm-color-primary-darker: #1fa588;
+  --ifm-color-primary-darkest: #1a8870;
+  --ifm-color-primary-light: #29d5b0;
+  --ifm-color-primary-lighter: #32d8b4;
+  --ifm-color-primary-lightest: #4fddbf;
+  --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3);
+}
+
+
+
+
+
+.theme-doc-markdown.markdown {
+  @media (min-width: 996px) {
+    padding-left: 1rem;
+    padding-right: 1rem;
+  }
+}
+
+.theme-doc-markdown.markdown h1:first-child {
+  --ifm-h1-font-size: 2.25rem;
+}
+
+.footer {
+  --ifm-footer-background-color: #02060A;
+}
+
+/* Hide specific div based on inline style */
+div:has( > img[src$="#only-light"]),
+div:has( > img[src$="#only-dark"]) {
+  display: none;
+}
+
+/* Sidebar */
+.theme-doc-sidebar-container {
+  background-color: #131515;
+}
+
+a.menu__link[href="/docs/console"],
+a.menu__link[href="/docs/console/"] {
+  display:none;
+}
\ No newline at end of file
diff --git a/src/hooks/useIsBelowBreakpoint.ts b/src/hooks/useIsBelowBreakpoint.ts
new file mode 100644
index 00000000..0ca5d525
--- /dev/null
+++ b/src/hooks/useIsBelowBreakpoint.ts
@@ -0,0 +1,8 @@
+import { useWindowSize } from "@uidotdev/usehooks";
+
+const useIsBelowBreakpoint = (breakpoint: number) => {
+	const size = useWindowSize();
+	return size.width ? size.width < breakpoint : false;
+};
+
+export default useIsBelowBreakpoint;
diff --git a/src/hooks/useIsScrolled.ts b/src/hooks/useIsScrolled.ts
new file mode 100644
index 00000000..0e88cea3
--- /dev/null
+++ b/src/hooks/useIsScrolled.ts
@@ -0,0 +1,19 @@
+import { useState } from "react";
+import { useMotionValueEvent, useScroll } from "motion/react";
+
+const useIsScrolled = (threshold = 250, buffer = 40) => {
+	const [isScrolled, setIsScrolled] = useState(false);
+	const { scrollY } = useScroll();
+
+	useMotionValueEvent(scrollY, "change", (latest) => {
+		if (latest > threshold && !isScrolled) {
+			setIsScrolled(true);
+		} else if (latest < threshold - buffer && isScrolled) {
+			setIsScrolled(false);
+		}
+	});
+
+	return isScrolled;
+};
+
+export default useIsScrolled;
diff --git a/src/hooks/useResourcePreviewData.ts b/src/hooks/useResourcePreviewData.ts
new file mode 100644
index 00000000..3db76267
--- /dev/null
+++ b/src/hooks/useResourcePreviewData.ts
@@ -0,0 +1,45 @@
+import getResourceType, { ResourceType } from "../utils/getResourceType";
+
+export type ResourceCardProps = {
+	post_title: string;
+	post_type?: ResourceType;
+	permalink: string;
+	featured_image?: any;
+	acf?: {
+		podcast_details: {
+			video_url?: string;
+			description?: string;
+		};
+	};
+	className?: string;
+};
+
+type ResourceData = Pick<ResourceCardProps, "post_type" | "acf" | "permalink">;
+
+type ResourcePreviewData = {
+	resourceType: string;
+	isPodcast: boolean;
+	hasPermalink: boolean;
+	resourceUrl: string | null;
+	target: string;
+};
+
+export default function useResourcePreviewData(data: ResourceData): ResourcePreviewData {
+	const { post_type, acf, permalink } = data;
+	const resourceType = getResourceType(post_type as ResourceType);
+	const isPodcast = resourceType === "Podcast";
+	const videoUrl = acf?.podcast_details?.video_url || "";
+	const hasPermalink = Boolean((isPodcast && videoUrl) || permalink);
+
+	const resourceUrl = isPodcast && videoUrl ? videoUrl : permalink || null;
+
+	const target = isPodcast && videoUrl ? "_blank" : "_self";
+
+	return {
+		resourceType,
+		isPodcast,
+		hasPermalink,
+		resourceUrl,
+		target,
+	};
+}
diff --git a/src/pages/index.tsx b/src/pages/index.tsx
new file mode 100644
index 00000000..819d4bd2
--- /dev/null
+++ b/src/pages/index.tsx
@@ -0,0 +1,8 @@
+import { useEffect } from 'react';
+
+
+export default function Home(): void {
+	useEffect(() => {
+		window.location.href = '/docs/netbox/';
+	}, []);
+}
diff --git a/src/theme/DocSidebar/Desktop/CollapseButton/index.tsx b/src/theme/DocSidebar/Desktop/CollapseButton/index.tsx
new file mode 100644
index 00000000..d2c5b662
--- /dev/null
+++ b/src/theme/DocSidebar/Desktop/CollapseButton/index.tsx
@@ -0,0 +1,31 @@
+import React, {type ReactNode} from 'react';
+import clsx from 'clsx';
+import {translate} from '@docusaurus/Translate';
+import IconArrow from '@theme/Icon/Arrow';
+import type {Props} from '@theme/DocSidebar/Desktop/CollapseButton';
+
+import styles from './styles.module.css';
+
+export default function CollapseButton({onClick}: Props): ReactNode {
+  return (
+    <button
+      type="button"
+      title={translate({
+        id: 'theme.docs.sidebar.collapseButtonTitle',
+        message: 'Collapse sidebar',
+        description: 'The title attribute for collapse button of doc sidebar',
+      })}
+      aria-label={translate({
+        id: 'theme.docs.sidebar.collapseButtonAriaLabel',
+        message: 'Collapse sidebar',
+        description: 'The title attribute for collapse button of doc sidebar',
+      })}
+      className={clsx(
+        'button button--secondary button--outline',
+        styles.collapseSidebarButton,
+      )}
+      onClick={onClick}>
+      <IconArrow className={styles.collapseSidebarButtonIcon} />
+    </button>
+  );
+}
diff --git a/src/theme/DocSidebar/Desktop/CollapseButton/styles.module.css b/src/theme/DocSidebar/Desktop/CollapseButton/styles.module.css
new file mode 100644
index 00000000..df46519f
--- /dev/null
+++ b/src/theme/DocSidebar/Desktop/CollapseButton/styles.module.css
@@ -0,0 +1,40 @@
+:root {
+  --docusaurus-collapse-button-bg: transparent;
+  --docusaurus-collapse-button-bg-hover: rgb(0 0 0 / 10%);
+}
+
+[data-theme='dark']:root {
+  --docusaurus-collapse-button-bg: rgb(255 255 255 / 5%);
+  --docusaurus-collapse-button-bg-hover: rgb(255 255 255 / 10%);
+}
+
+@media (min-width: 997px) {
+  .collapseSidebarButton {
+    display: block !important;
+    background-color: var(--docusaurus-collapse-button-bg);
+    height: 40px;
+    position: sticky;
+    bottom: 0;
+    border-radius: 0;
+    border: 1px solid var(--ifm-toc-border-color);
+  }
+
+  .collapseSidebarButtonIcon {
+    transform: rotate(180deg);
+    margin-top: 4px;
+  }
+
+  [dir='rtl'] .collapseSidebarButtonIcon {
+    transform: rotate(0);
+  }
+
+  .collapseSidebarButton:hover,
+  .collapseSidebarButton:focus {
+    background-color: var(--docusaurus-collapse-button-bg-hover);
+  }
+}
+
+.collapseSidebarButton {
+  display: none;
+  margin: 0;
+}
diff --git a/src/theme/DocSidebar/Desktop/Content/index.tsx b/src/theme/DocSidebar/Desktop/Content/index.tsx
new file mode 100644
index 00000000..3cd8d73a
--- /dev/null
+++ b/src/theme/DocSidebar/Desktop/Content/index.tsx
@@ -0,0 +1,18 @@
+import React, {type ReactNode} from 'react';
+import Content from '@theme-original/DocSidebar/Desktop/Content';
+import type ContentType from '@theme/DocSidebar/Desktop/Content';
+import type {WrapperProps} from '@docusaurus/types';
+import SearchBar from '@theme/SearchBar';
+
+type Props = WrapperProps<typeof ContentType>;
+
+export default function ContentWrapper(props: Props): ReactNode {
+  return (
+    <>
+      <div style={{padding: '0.5rem 1rem'}}>
+        <SearchBar />
+      </div>
+      <Content {...props} />
+    </>
+  );
+}
diff --git a/src/theme/DocSidebar/Desktop/Content/styles.module.css b/src/theme/DocSidebar/Desktop/Content/styles.module.css
new file mode 100644
index 00000000..0c43a4e4
--- /dev/null
+++ b/src/theme/DocSidebar/Desktop/Content/styles.module.css
@@ -0,0 +1,16 @@
+@media (min-width: 997px) {
+  .menu {
+    flex-grow: 1;
+    padding: 0.5rem;
+  }
+  @supports (scrollbar-gutter: stable) {
+    .menu {
+      padding: 0.5rem 0 0.5rem 0.5rem;
+      scrollbar-gutter: stable;
+    }
+  }
+
+  .menuWithAnnouncementBar {
+    margin-bottom: var(--docusaurus-announcement-bar-height);
+  }
+}
diff --git a/src/theme/DocSidebar/Desktop/index.tsx b/src/theme/DocSidebar/Desktop/index.tsx
new file mode 100644
index 00000000..9446ba23
--- /dev/null
+++ b/src/theme/DocSidebar/Desktop/index.tsx
@@ -0,0 +1,33 @@
+import React from 'react';
+import clsx from 'clsx';
+import {useThemeConfig} from '@docusaurus/theme-common';
+import Logo from '@theme/Logo';
+import CollapseButton from '@theme/DocSidebar/Desktop/CollapseButton';
+import Content from '@theme/DocSidebar/Desktop/Content';
+import type {Props} from '@theme/DocSidebar/Desktop';
+
+import styles from './styles.module.css';
+
+function DocSidebarDesktop({path, sidebar, onCollapse, isHidden}: Props) {
+  const {
+    navbar: {hideOnScroll},
+    docs: {
+      sidebar: {hideable},
+    },
+  } = useThemeConfig();
+
+  return (
+    <div
+      className={clsx(
+        styles.sidebar,
+        hideOnScroll && styles.sidebarWithHideableNavbar,
+        isHidden && styles.sidebarHidden,
+      )}>
+      {hideOnScroll && <Logo tabIndex={-1} className={styles.sidebarLogo} />}
+      <Content path={path} sidebar={sidebar} />
+      {hideable && <CollapseButton onClick={onCollapse} />}
+    </div>
+  );
+}
+
+export default React.memo(DocSidebarDesktop);
diff --git a/src/theme/DocSidebar/Desktop/styles.module.css b/src/theme/DocSidebar/Desktop/styles.module.css
new file mode 100644
index 00000000..c5d5e50e
--- /dev/null
+++ b/src/theme/DocSidebar/Desktop/styles.module.css
@@ -0,0 +1,37 @@
+@media (min-width: 997px) {
+  .sidebar {
+    display: flex;
+    flex-direction: column;
+    height: 100%;
+    padding-top: var(--ifm-navbar-height);
+    width: var(--doc-sidebar-width);
+  }
+
+  .sidebarWithHideableNavbar {
+    padding-top: 0;
+  }
+
+  .sidebarHidden {
+    opacity: 0;
+    visibility: hidden;
+  }
+
+  .sidebarLogo {
+    display: flex !important;
+    align-items: center;
+    margin: 0 var(--ifm-navbar-padding-horizontal);
+    min-height: var(--ifm-navbar-height);
+    max-height: var(--ifm-navbar-height);
+    color: inherit !important;
+    text-decoration: none !important;
+  }
+
+  .sidebarLogo img {
+    margin-right: 0.5rem;
+    height: 2rem;
+  }
+}
+
+.sidebarLogo {
+  display: none;
+}
diff --git a/src/theme/DocSidebar/Mobile/index.tsx b/src/theme/DocSidebar/Mobile/index.tsx
new file mode 100644
index 00000000..c4b33172
--- /dev/null
+++ b/src/theme/DocSidebar/Mobile/index.tsx
@@ -0,0 +1,47 @@
+import React from 'react';
+import clsx from 'clsx';
+import {
+  NavbarSecondaryMenuFiller,
+  type NavbarSecondaryMenuComponent,
+  ThemeClassNames,
+} from '@docusaurus/theme-common';
+import {useNavbarMobileSidebar} from '@docusaurus/theme-common/internal';
+import DocSidebarItems from '@theme/DocSidebarItems';
+import type {Props} from '@theme/DocSidebar/Mobile';
+
+// eslint-disable-next-line react/function-component-definition
+const DocSidebarMobileSecondaryMenu: NavbarSecondaryMenuComponent<Props> = ({
+  sidebar,
+  path,
+}) => {
+  const mobileSidebar = useNavbarMobileSidebar();
+  return (
+    <ul className={clsx(ThemeClassNames.docs.docSidebarMenu, 'menu__list')}>
+      <DocSidebarItems
+        items={sidebar}
+        activePath={path}
+        onItemClick={(item) => {
+          // Mobile sidebar should only be closed if the category has a link
+          if (item.type === 'category' && item.href) {
+            mobileSidebar.toggle();
+          }
+          if (item.type === 'link') {
+            mobileSidebar.toggle();
+          }
+        }}
+        level={1}
+      />
+    </ul>
+  );
+};
+
+function DocSidebarMobile(props: Props) {
+  return (
+    <NavbarSecondaryMenuFiller
+      component={DocSidebarMobileSecondaryMenu}
+      props={props}
+    />
+  );
+}
+
+export default React.memo(DocSidebarMobile);
diff --git a/src/theme/DocSidebar/index.tsx b/src/theme/DocSidebar/index.tsx
new file mode 100644
index 00000000..e8879147
--- /dev/null
+++ b/src/theme/DocSidebar/index.tsx
@@ -0,0 +1,23 @@
+import React, {type ReactNode} from 'react';
+import {useWindowSize} from '@docusaurus/theme-common';
+import DocSidebarDesktop from '@theme/DocSidebar/Desktop';
+import DocSidebarMobile from '@theme/DocSidebar/Mobile';
+import type {Props} from '@theme/DocSidebar';
+
+export default function DocSidebar(props: Props): ReactNode {
+  const windowSize = useWindowSize();
+
+  // Desktop sidebar visible on hydration: need SSR rendering
+  const shouldRenderSidebarDesktop =
+    windowSize === 'desktop' || windowSize === 'ssr';
+
+  // Mobile sidebar not visible on hydration: can avoid SSR rendering
+  const shouldRenderSidebarMobile = windowSize === 'mobile';
+
+  return (
+    <>
+      {shouldRenderSidebarDesktop && <DocSidebarDesktop {...props} />}
+      {shouldRenderSidebarMobile && <DocSidebarMobile {...props} />}
+    </>
+  );
+}
diff --git a/src/theme/DocSidebarItem/Category/index.tsx b/src/theme/DocSidebarItem/Category/index.tsx
new file mode 100644
index 00000000..e50d3960
--- /dev/null
+++ b/src/theme/DocSidebarItem/Category/index.tsx
@@ -0,0 +1,224 @@
+import React, {
+  type ComponentProps,
+  type ReactNode,
+  useEffect,
+  useMemo,
+} from 'react';
+import clsx from 'clsx';
+import {
+  ThemeClassNames,
+  useThemeConfig,
+  usePrevious,
+  Collapsible,
+  useCollapsible,
+} from '@docusaurus/theme-common';
+import {isSamePath} from '@docusaurus/theme-common/internal';
+import {
+  isActiveSidebarItem,
+  findFirstSidebarItemLink,
+  useDocSidebarItemsExpandedState,
+} from '@docusaurus/plugin-content-docs/client';
+import Link from '@docusaurus/Link';
+import {translate} from '@docusaurus/Translate';
+import useIsBrowser from '@docusaurus/useIsBrowser';
+import DocSidebarItems from '@theme/DocSidebarItems';
+import type {Props} from '@theme/DocSidebarItem/Category';
+
+// If we navigate to a category and it becomes active, it should automatically
+// expand itself
+function useAutoExpandActiveCategory({
+  isActive,
+  collapsed,
+  updateCollapsed,
+}: {
+  isActive: boolean;
+  collapsed: boolean;
+  updateCollapsed: (b: boolean) => void;
+}) {
+  const wasActive = usePrevious(isActive);
+  useEffect(() => {
+    const justBecameActive = isActive && !wasActive;
+    if (justBecameActive && collapsed) {
+      updateCollapsed(false);
+    }
+  }, [isActive, wasActive, collapsed, updateCollapsed]);
+}
+
+/**
+ * When a collapsible category has no link, we still link it to its first child
+ * during SSR as a temporary fallback. This allows to be able to navigate inside
+ * the category even when JS fails to load, is delayed or simply disabled
+ * React hydration becomes an optional progressive enhancement
+ * see https://github.com/facebookincubator/infima/issues/36#issuecomment-772543188
+ * see https://github.com/facebook/docusaurus/issues/3030
+ */
+function useCategoryHrefWithSSRFallback(
+  item: Props['item'],
+): string | undefined {
+  const isBrowser = useIsBrowser();
+  return useMemo(() => {
+    if (item.href && !item.linkUnlisted) {
+      return item.href;
+    }
+    // In these cases, it's not necessary to render a fallback
+    // We skip the "findFirstCategoryLink" computation
+    if (isBrowser || !item.collapsible) {
+      return undefined;
+    }
+    return findFirstSidebarItemLink(item);
+  }, [item, isBrowser]);
+}
+
+function CollapseButton({
+  collapsed,
+  categoryLabel,
+  onClick,
+}: {
+  collapsed: boolean;
+  categoryLabel: string;
+  onClick: ComponentProps<'button'>['onClick'];
+}) {
+  return (
+    <button
+      aria-label={
+        collapsed
+          ? translate(
+              {
+                id: 'theme.DocSidebarItem.expandCategoryAriaLabel',
+                message: "Expand sidebar category '{label}'",
+                description: 'The ARIA label to expand the sidebar category',
+              },
+              {label: categoryLabel},
+            )
+          : translate(
+              {
+                id: 'theme.DocSidebarItem.collapseCategoryAriaLabel',
+                message: "Collapse sidebar category '{label}'",
+                description: 'The ARIA label to collapse the sidebar category',
+              },
+              {label: categoryLabel},
+            )
+      }
+      aria-expanded={!collapsed}
+      type="button"
+      className="clean-btn menu__caret"
+      onClick={onClick}
+    />
+  );
+}
+
+export default function DocSidebarItemCategory({
+  item,
+  onItemClick,
+  activePath,
+  level,
+  index,
+  ...props
+}: Props): ReactNode {
+  const {items, label, collapsible, className, href} = item;
+  const {
+    docs: {
+      sidebar: {autoCollapseCategories},
+    },
+  } = useThemeConfig();
+  const hrefWithSSRFallback = useCategoryHrefWithSSRFallback(item);
+
+  const isActive = isActiveSidebarItem(item, activePath);
+  const isCurrentPage = isSamePath(href, activePath);
+
+  const {collapsed, setCollapsed} = useCollapsible({
+    // Active categories are always initialized as expanded. The default
+    // (`item.collapsed`) is only used for non-active categories.
+    initialState: () => {
+      if (!collapsible) {
+        return false;
+      }
+      return isActive ? false : item.collapsed;
+    },
+  });
+
+  const {expandedItem, setExpandedItem} = useDocSidebarItemsExpandedState();
+  // Use this instead of `setCollapsed`, because it is also reactive
+  const updateCollapsed = (toCollapsed: boolean = !collapsed) => {
+    setExpandedItem(toCollapsed ? null : index);
+    setCollapsed(toCollapsed);
+  };
+  useAutoExpandActiveCategory({isActive, collapsed, updateCollapsed});
+  useEffect(() => {
+    if (
+      collapsible &&
+      expandedItem != null &&
+      expandedItem !== index &&
+      autoCollapseCategories
+    ) {
+      setCollapsed(true);
+    }
+  }, [collapsible, expandedItem, index, setCollapsed, autoCollapseCategories]);
+  const labelText = label.replace('-', ' ').replace(/\b\w/g, (char) => char.toUpperCase());
+  return (
+    <li
+      className={clsx(
+        ThemeClassNames.docs.docSidebarItemCategory,
+        ThemeClassNames.docs.docSidebarItemCategoryLevel(level),
+        'menu__list-item',
+        {
+          'menu__list-item--collapsed': collapsed,
+        },
+        className,
+      )}>
+      <div
+        className={clsx('menu__list-item-collapsible', {
+          'menu__list-item-collapsible--active': isCurrentPage,
+        })}>
+        <Link
+          className={clsx('menu__link', {
+            'menu__link--sublist': collapsible,
+            'menu__link--sublist-caret': !href && collapsible,
+            'menu__link--active': isActive,
+          })}
+          onClick={
+            collapsible
+              ? (e) => {
+                  onItemClick?.(item);
+                  if (href) {
+                    updateCollapsed(false);
+                  } else {
+                    e.preventDefault();
+                    updateCollapsed();
+                  }
+                }
+              : () => {
+                  onItemClick?.(item);
+                }
+          }
+          aria-current={isCurrentPage ? 'page' : undefined}
+          role={collapsible && !href ? 'button' : undefined}
+          aria-expanded={collapsible && !href ? !collapsed : undefined}
+          href={collapsible ? hrefWithSSRFallback ?? '#' : hrefWithSSRFallback}
+          {...props}>
+          {labelText}
+        </Link>
+        {href && collapsible && (
+          <CollapseButton
+            collapsed={collapsed}
+            categoryLabel={label}
+            onClick={(e) => {
+              e.preventDefault();
+              updateCollapsed();
+            }}
+          />
+        )}
+      </div>
+
+      <Collapsible lazy as="ul" className="menu__list" collapsed={collapsed}>
+        <DocSidebarItems
+          items={items}
+          tabIndex={collapsed ? -1 : 0}
+          onItemClick={onItemClick}
+          activePath={activePath}
+          level={level + 1}
+        />
+      </Collapsible>
+    </li>
+  );
+}
diff --git a/src/theme/DocSidebarItem/Html/index.tsx b/src/theme/DocSidebarItem/Html/index.tsx
new file mode 100644
index 00000000..067e2f07
--- /dev/null
+++ b/src/theme/DocSidebarItem/Html/index.tsx
@@ -0,0 +1,27 @@
+import React, {type ReactNode} from 'react';
+import clsx from 'clsx';
+import {ThemeClassNames} from '@docusaurus/theme-common';
+import type {Props} from '@theme/DocSidebarItem/Html';
+
+import styles from './styles.module.css';
+
+export default function DocSidebarItemHtml({
+  item,
+  level,
+  index,
+}: Props): ReactNode {
+  const {value, defaultStyle, className} = item;
+  return (
+    <li
+      className={clsx(
+        ThemeClassNames.docs.docSidebarItemLink,
+        ThemeClassNames.docs.docSidebarItemLinkLevel(level),
+        defaultStyle && [styles.menuHtmlItem, 'menu__list-item'],
+        className,
+      )}
+      key={index}
+      // eslint-disable-next-line react/no-danger
+      dangerouslySetInnerHTML={{__html: value}}
+    />
+  );
+}
diff --git a/src/theme/DocSidebarItem/Html/styles.module.css b/src/theme/DocSidebarItem/Html/styles.module.css
new file mode 100644
index 00000000..69ce544f
--- /dev/null
+++ b/src/theme/DocSidebarItem/Html/styles.module.css
@@ -0,0 +1,6 @@
+@media (min-width: 997px) {
+  .menuHtmlItem {
+    padding: var(--ifm-menu-link-padding-vertical)
+      var(--ifm-menu-link-padding-horizontal);
+  }
+}
diff --git a/src/theme/DocSidebarItem/Link/index.tsx b/src/theme/DocSidebarItem/Link/index.tsx
new file mode 100644
index 00000000..4d7f6584
--- /dev/null
+++ b/src/theme/DocSidebarItem/Link/index.tsx
@@ -0,0 +1,53 @@
+import React, {type ReactNode} from 'react';
+import clsx from 'clsx';
+import {ThemeClassNames} from '@docusaurus/theme-common';
+import {isActiveSidebarItem} from '@docusaurus/plugin-content-docs/client';
+import Link from '@docusaurus/Link';
+import isInternalUrl from '@docusaurus/isInternalUrl';
+import IconExternalLink from '@theme/Icon/ExternalLink';
+import type {Props} from '@theme/DocSidebarItem/Link';
+
+import styles from './styles.module.css';
+
+export default function DocSidebarItemLink({
+  item,
+  onItemClick,
+  activePath,
+  level,
+  index,
+  ...props
+}: Props): ReactNode {
+  const {href, label, className, autoAddBaseUrl} = item;
+  const isActive = isActiveSidebarItem(item, activePath);
+  const isInternalLink = isInternalUrl(href);
+  const labelText = label.replace('-', ' ').replace(/\b\w/g, (char) => char.toUpperCase());
+  return (
+    <li
+      className={clsx(
+        ThemeClassNames.docs.docSidebarItemLink,
+        ThemeClassNames.docs.docSidebarItemLinkLevel(level),
+        'menu__list-item',
+        className,
+      )}
+      key={label}>
+      <Link
+        className={clsx(
+          'menu__link',
+          !isInternalLink && styles.menuExternalLink,
+          {
+            'menu__link--active': isActive,
+          },
+        )}
+        autoAddBaseUrl={autoAddBaseUrl}
+        aria-current={isActive ? 'page' : undefined}
+        to={href}
+        {...(isInternalLink && {
+          onClick: onItemClick ? () => onItemClick(item) : undefined,
+        })}
+        {...props}>
+        {labelText}
+        {!isInternalLink && <IconExternalLink />}
+      </Link>
+    </li>
+  );
+}
diff --git a/src/theme/DocSidebarItem/Link/styles.module.css b/src/theme/DocSidebarItem/Link/styles.module.css
new file mode 100644
index 00000000..acba7f3f
--- /dev/null
+++ b/src/theme/DocSidebarItem/Link/styles.module.css
@@ -0,0 +1,3 @@
+.menuExternalLink {
+  align-items: center;
+}
diff --git a/src/theme/DocSidebarItem/index.tsx b/src/theme/DocSidebarItem/index.tsx
new file mode 100644
index 00000000..86e06967
--- /dev/null
+++ b/src/theme/DocSidebarItem/index.tsx
@@ -0,0 +1,17 @@
+import React, {type ReactNode} from 'react';
+import DocSidebarItemCategory from '@theme/DocSidebarItem/Category';
+import DocSidebarItemLink from '@theme/DocSidebarItem/Link';
+import DocSidebarItemHtml from '@theme/DocSidebarItem/Html';
+import type {Props} from '@theme/DocSidebarItem';
+
+export default function DocSidebarItem({item, ...props}: Props): ReactNode {
+  switch (item.type) {
+    case 'category':
+      return <DocSidebarItemCategory item={item} {...props} />;
+    case 'html':
+      return <DocSidebarItemHtml item={item} {...props} />;
+    case 'link':
+    default:
+      return <DocSidebarItemLink item={item} {...props} />;
+  }
+}
diff --git a/src/theme/Navbar/ColorModeToggle/index.tsx b/src/theme/Navbar/ColorModeToggle/index.tsx
new file mode 100644
index 00000000..81b96478
--- /dev/null
+++ b/src/theme/Navbar/ColorModeToggle/index.tsx
@@ -0,0 +1,26 @@
+import React, {type ReactNode} from 'react';
+import {useColorMode, useThemeConfig} from '@docusaurus/theme-common';
+import ColorModeToggle from '@theme/ColorModeToggle';
+import type {Props} from '@theme/Navbar/ColorModeToggle';
+import styles from './styles.module.css';
+
+export default function NavbarColorModeToggle({className}: Props): ReactNode {
+  const navbarStyle = useThemeConfig().navbar.style;
+  const disabled = useThemeConfig().colorMode.disableSwitch;
+  const {colorMode, setColorMode} = useColorMode();
+
+  if (disabled) {
+    return null;
+  }
+
+  return (
+    <ColorModeToggle
+      className={className}
+      buttonClassName={
+        navbarStyle === 'dark' ? styles.darkNavbarColorModeToggle : undefined
+      }
+      value={colorMode}
+      onChange={setColorMode}
+    />
+  );
+}
diff --git a/src/theme/Navbar/ColorModeToggle/styles.module.css b/src/theme/Navbar/ColorModeToggle/styles.module.css
new file mode 100644
index 00000000..7bd077a6
--- /dev/null
+++ b/src/theme/Navbar/ColorModeToggle/styles.module.css
@@ -0,0 +1,3 @@
+.darkNavbarColorModeToggle:hover {
+  background: var(--ifm-color-gray-800);
+}
diff --git a/src/theme/Navbar/Content/index.tsx b/src/theme/Navbar/Content/index.tsx
new file mode 100644
index 00000000..f8ebe925
--- /dev/null
+++ b/src/theme/Navbar/Content/index.tsx
@@ -0,0 +1,90 @@
+import React, {type ReactNode} from 'react';
+import {useThemeConfig, ErrorCauseBoundary} from '@docusaurus/theme-common';
+import {
+  splitNavbarItems,
+  useNavbarMobileSidebar,
+} from '@docusaurus/theme-common/internal';
+import NavbarItem, {type Props as NavbarItemConfig} from '@theme/NavbarItem';
+import NavbarColorModeToggle from '@theme/Navbar/ColorModeToggle';
+import SearchBar from '@theme/SearchBar';
+import NavbarMobileSidebarToggle from '@theme/Navbar/MobileSidebar/Toggle';
+import NavbarLogo from '@theme/Navbar/Logo';
+import NavbarSearch from '@theme/Navbar/Search';
+
+import styles from './styles.module.css';
+
+function useNavbarItems() {
+  // TODO temporary casting until ThemeConfig type is improved
+  return useThemeConfig().navbar.items as NavbarItemConfig[];
+}
+
+function NavbarItems({items}: {items: NavbarItemConfig[]}): ReactNode {
+  return (
+    <>
+      {items.map((item, i) => (
+        <ErrorCauseBoundary
+          key={i}
+          onError={(error) =>
+            new Error(
+              `A theme navbar item failed to render.
+Please double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:
+${JSON.stringify(item, null, 2)}`,
+              {cause: error},
+            )
+          }>
+          <NavbarItem {...item} />
+        </ErrorCauseBoundary>
+      ))}
+    </>
+  );
+}
+
+function NavbarContentLayout({
+  left,
+  right,
+}: {
+  left: ReactNode;
+  right: ReactNode;
+}) {
+  return (
+    <div className="navbar__inner">
+      <div className="navbar__items">{left}</div>
+      <div className="navbar__items navbar__items--right">{right}</div>
+    </div>
+  );
+}
+
+export default function NavbarContent(): ReactNode {
+  const mobileSidebar = useNavbarMobileSidebar();
+
+  const items = useNavbarItems();
+  const [leftItems, rightItems] = splitNavbarItems(items);
+
+  const searchBarItem = items.find((item) => item.type === 'search');
+
+  return (
+    <NavbarContentLayout
+      left={
+        // TODO stop hardcoding items?
+        <>
+          {!mobileSidebar.disabled && <NavbarMobileSidebarToggle />}
+          <NavbarLogo />
+          <NavbarItems items={leftItems} />
+        </>
+      }
+      right={
+        // TODO stop hardcoding items?
+        // Ask the user to add the respective navbar items => more flexible
+        <>
+          <NavbarItems items={rightItems} />
+          <NavbarColorModeToggle className={styles.colorModeToggle} />
+          {!searchBarItem && (
+            <NavbarSearch>
+              <SearchBar />
+            </NavbarSearch>
+          )}
+        </>
+      }
+    />
+  );
+}
diff --git a/src/theme/Navbar/Content/styles.module.css b/src/theme/Navbar/Content/styles.module.css
new file mode 100644
index 00000000..4c9471e1
--- /dev/null
+++ b/src/theme/Navbar/Content/styles.module.css
@@ -0,0 +1,8 @@
+/*
+Hide color mode toggle in small viewports
+ */
+@media (max-width: 996px) {
+  .colorModeToggle {
+    display: none;
+  }
+}
diff --git a/src/theme/Navbar/Layout/index.tsx b/src/theme/Navbar/Layout/index.tsx
new file mode 100644
index 00000000..4ad62c50
--- /dev/null
+++ b/src/theme/Navbar/Layout/index.tsx
@@ -0,0 +1,46 @@
+import React, { type ReactNode } from 'react';
+import clsx from 'clsx';
+import { useThemeConfig } from '@docusaurus/theme-common';
+import {
+  useHideableNavbar,
+  useNavbarMobileSidebar,
+} from '@docusaurus/theme-common/internal';
+import { translate } from '@docusaurus/Translate';
+import NavbarMobileSidebar from '@theme/Navbar/MobileSidebar';
+import type { Props } from '@theme/Navbar/Layout';
+import styles from './styles.module.css';
+
+// Import your custom Header component
+import Header from '../../../components/global/header/Header';
+
+export default function NavbarLayout({ children }: Props): React.ReactElement {
+  const themeConfig = useThemeConfig();
+  const { navbar: { hideOnScroll, style } } = themeConfig;
+  const mobileSidebar = useNavbarMobileSidebar();
+  const { navbarRef, isNavbarVisible } = useHideableNavbar(hideOnScroll);
+  
+  return (
+    <nav
+      ref={navbarRef}
+      aria-label={translate({
+        id: 'theme.NavBar.navAriaLabel',
+        message: 'Main',
+      })}
+      className={clsx(
+        'navbar',
+        'navbar--fixed-top',
+        hideOnScroll && [
+          styles.navbarHideable,
+          !isNavbarVisible && styles.navbarHidden,
+        ],
+        {
+          'navbar--dark': style === 'dark',
+          'navbar--primary': style === 'primary',
+          'navbar-sidebar--show': mobileSidebar.shown,
+        },
+      )}>
+      <Header options={{ header: themeConfig.navbar }} />
+      <NavbarMobileSidebar />
+    </nav>
+  );
+}
diff --git a/src/theme/Navbar/Layout/styles.module.css b/src/theme/Navbar/Layout/styles.module.css
new file mode 100644
index 00000000..e72891a4
--- /dev/null
+++ b/src/theme/Navbar/Layout/styles.module.css
@@ -0,0 +1,7 @@
+.navbarHideable {
+  transition: transform var(--ifm-transition-fast) ease;
+}
+
+.navbarHidden {
+  transform: translate3d(0, calc(-100% - 2px), 0);
+}
diff --git a/src/theme/Navbar/Logo/index.tsx b/src/theme/Navbar/Logo/index.tsx
new file mode 100644
index 00000000..72d320a0
--- /dev/null
+++ b/src/theme/Navbar/Logo/index.tsx
@@ -0,0 +1,12 @@
+import React, {type ReactNode} from 'react';
+import Logo from '@theme/Logo';
+
+export default function NavbarLogo(): ReactNode {
+  return (
+    <Logo
+      className="navbar__brand"
+      imageClassName="navbar__logo"
+      titleClassName="navbar__title text--truncate"
+    />
+  );
+}
diff --git a/src/theme/Navbar/MobileSidebar/Header/index.tsx b/src/theme/Navbar/MobileSidebar/Header/index.tsx
new file mode 100644
index 00000000..dc093540
--- /dev/null
+++ b/src/theme/Navbar/MobileSidebar/Header/index.tsx
@@ -0,0 +1,33 @@
+import React, {type ReactNode} from 'react';
+import {useNavbarMobileSidebar} from '@docusaurus/theme-common/internal';
+import {translate} from '@docusaurus/Translate';
+import NavbarColorModeToggle from '@theme/Navbar/ColorModeToggle';
+import IconClose from '@theme/Icon/Close';
+import NavbarLogo from '@theme/Navbar/Logo';
+
+function CloseButton() {
+  const mobileSidebar = useNavbarMobileSidebar();
+  return (
+    <button
+      type="button"
+      aria-label={translate({
+        id: 'theme.docs.sidebar.closeSidebarButtonAriaLabel',
+        message: 'Close navigation bar',
+        description: 'The ARIA label for close button of mobile sidebar',
+      })}
+      className="clean-btn navbar-sidebar__close"
+      onClick={() => mobileSidebar.toggle()}>
+      <IconClose color="var(--ifm-color-emphasis-600)" />
+    </button>
+  );
+}
+
+export default function NavbarMobileSidebarHeader(): ReactNode {
+  return (
+    <div className="navbar-sidebar__brand">
+      <NavbarLogo />
+      <NavbarColorModeToggle className="margin-right--md" />
+      <CloseButton />
+    </div>
+  );
+}
diff --git a/src/theme/Navbar/MobileSidebar/Layout/index.tsx b/src/theme/Navbar/MobileSidebar/Layout/index.tsx
new file mode 100644
index 00000000..8063151d
--- /dev/null
+++ b/src/theme/Navbar/MobileSidebar/Layout/index.tsx
@@ -0,0 +1,28 @@
+import React, {type ReactNode} from 'react';
+import clsx from 'clsx';
+import {useNavbarSecondaryMenu} from '@docusaurus/theme-common/internal';
+import type {Props} from '@theme/Navbar/MobileSidebar/Layout';
+import SearchBar from '@theme/SearchBar';
+
+export default function NavbarMobileSidebarLayout({
+  header,
+  primaryMenu,
+  secondaryMenu,
+}: Props): ReactNode {
+  const {shown: secondaryMenuShown} = useNavbarSecondaryMenu();
+  return (
+    <div className="navbar-sidebar">
+      {header}
+      <div style={{padding: '0.5rem 1rem', borderBottom: '1px solid var(--ifm-hr-border-color)'}}>
+        <SearchBar />
+      </div>
+      <div
+        className={clsx('navbar-sidebar__items', {
+          'navbar-sidebar__items--show-secondary': secondaryMenuShown,
+        })}>
+        <div className="navbar-sidebar__item menu">{primaryMenu}</div>
+        <div className="navbar-sidebar__item menu">{secondaryMenu}</div>
+      </div>
+    </div>
+  );
+}
diff --git a/src/theme/Navbar/MobileSidebar/PrimaryMenu/index.tsx b/src/theme/Navbar/MobileSidebar/PrimaryMenu/index.tsx
new file mode 100644
index 00000000..d5d0913e
--- /dev/null
+++ b/src/theme/Navbar/MobileSidebar/PrimaryMenu/index.tsx
@@ -0,0 +1,31 @@
+import React, {type ReactNode} from 'react';
+import {useThemeConfig} from '@docusaurus/theme-common';
+import {useNavbarMobileSidebar} from '@docusaurus/theme-common/internal';
+import NavbarItem, {type Props as NavbarItemConfig} from '@theme/NavbarItem';
+
+function useNavbarItems() {
+  // TODO temporary casting until ThemeConfig type is improved
+  return useThemeConfig().navbar.items as NavbarItemConfig[];
+}
+
+// The primary menu displays the navbar items
+export default function NavbarMobilePrimaryMenu(): ReactNode {
+  const mobileSidebar = useNavbarMobileSidebar();
+
+  // TODO how can the order be defined for mobile?
+  // Should we allow providing a different list of items?
+  const items = useNavbarItems();
+
+  return (
+    <ul className="menu__list">
+      {items.map((item, i) => (
+        <NavbarItem
+          mobile
+          {...item}
+          onClick={() => mobileSidebar.toggle()}
+          key={i}
+        />
+      ))}
+    </ul>
+  );
+}
diff --git a/src/theme/Navbar/MobileSidebar/SecondaryMenu/index.tsx b/src/theme/Navbar/MobileSidebar/SecondaryMenu/index.tsx
new file mode 100644
index 00000000..0b5e8b9e
--- /dev/null
+++ b/src/theme/Navbar/MobileSidebar/SecondaryMenu/index.tsx
@@ -0,0 +1,20 @@
+import React, {type ReactNode} from 'react';
+import {useThemeConfig} from '@docusaurus/theme-common';
+import {
+  useNavbarSecondaryMenu,
+} from '@docusaurus/theme-common/internal';
+
+// The secondary menu slides from the right and shows contextual information
+// such as the docs sidebar
+export default function NavbarMobileSidebarSecondaryMenu(): ReactNode {
+  const isPrimaryMenuEmpty = useThemeConfig().navbar.items.length === 0;
+  const docusaurusSecondaryMenu = useNavbarSecondaryMenu();
+
+  return (
+    <>
+      {/* The back button was conditionally rendered here, now removed. */}
+      {/* The original condition was: !isPrimaryMenuEmpty */}
+      {docusaurusSecondaryMenu.content}
+    </>
+  );
+}
diff --git a/src/theme/Navbar/MobileSidebar/Toggle/index.tsx b/src/theme/Navbar/MobileSidebar/Toggle/index.tsx
new file mode 100644
index 00000000..d8f9a530
--- /dev/null
+++ b/src/theme/Navbar/MobileSidebar/Toggle/index.tsx
@@ -0,0 +1,23 @@
+import React, {type ReactNode} from 'react';
+import {useNavbarMobileSidebar} from '@docusaurus/theme-common/internal';
+import {translate} from '@docusaurus/Translate';
+import IconMenu from '@theme/Icon/Menu';
+
+export default function MobileSidebarToggle(): ReactNode {
+  const {toggle, shown} = useNavbarMobileSidebar();
+  return (
+    <button
+      onClick={toggle}
+      aria-label={translate({
+        id: 'theme.docs.sidebar.toggleSidebarButtonAriaLabel',
+        message: 'Toggle navigation bar',
+        description:
+          'The ARIA label for hamburger menu button of mobile navigation',
+      })}
+      aria-expanded={shown}
+      className="navbar__toggle clean-btn"
+      type="button">
+      <IconMenu />
+    </button>
+  );
+}
diff --git a/src/theme/Navbar/MobileSidebar/index.tsx b/src/theme/Navbar/MobileSidebar/index.tsx
new file mode 100644
index 00000000..26c9f1cb
--- /dev/null
+++ b/src/theme/Navbar/MobileSidebar/index.tsx
@@ -0,0 +1,26 @@
+import React, {type ReactNode} from 'react';
+import {
+  useLockBodyScroll,
+  useNavbarMobileSidebar,
+} from '@docusaurus/theme-common/internal';
+import NavbarMobileSidebarLayout from '@theme/Navbar/MobileSidebar/Layout';
+import NavbarMobileSidebarHeader from '@theme/Navbar/MobileSidebar/Header';
+import NavbarMobileSidebarPrimaryMenu from '@theme/Navbar/MobileSidebar/PrimaryMenu';
+import NavbarMobileSidebarSecondaryMenu from '@theme/Navbar/MobileSidebar/SecondaryMenu';
+
+export default function NavbarMobileSidebar(): ReactNode {
+  const mobileSidebar = useNavbarMobileSidebar();
+  useLockBodyScroll(mobileSidebar.shown);
+
+  if (!mobileSidebar.shouldRender) {
+    return null;
+  }
+
+  return (
+    <NavbarMobileSidebarLayout
+      header={<NavbarMobileSidebarHeader />}
+      primaryMenu={<NavbarMobileSidebarPrimaryMenu />}
+      secondaryMenu={<NavbarMobileSidebarSecondaryMenu />}
+    />
+  );
+}
diff --git a/src/theme/Navbar/Search/index.tsx b/src/theme/Navbar/Search/index.tsx
new file mode 100644
index 00000000..4da080c7
--- /dev/null
+++ b/src/theme/Navbar/Search/index.tsx
@@ -0,0 +1,13 @@
+import React, {type ReactNode} from 'react';
+import clsx from 'clsx';
+import type {Props} from '@theme/Navbar/Search';
+
+import styles from './styles.module.css';
+
+export default function NavbarSearch({children, className}: Props): ReactNode {
+  return (
+    <div className={clsx(className, styles.navbarSearchContainer)}>
+      {children}
+    </div>
+  );
+}
diff --git a/src/theme/Navbar/Search/styles.module.css b/src/theme/Navbar/Search/styles.module.css
new file mode 100644
index 00000000..9eeb2934
--- /dev/null
+++ b/src/theme/Navbar/Search/styles.module.css
@@ -0,0 +1,21 @@
+/*
+Workaround to avoid rendering empty search container
+See https://github.com/facebook/docusaurus/pull/9385
+*/
+.navbarSearchContainer:empty {
+  display: none;
+}
+
+@media (max-width: 996px) {
+  .navbarSearchContainer {
+    position: absolute;
+    right: var(--ifm-navbar-padding-horizontal);
+  }
+}
+
+@media (min-width: 997px) {
+  .navbarSearchContainer {
+    padding: var(--ifm-navbar-item-padding-vertical)
+      var(--ifm-navbar-item-padding-horizontal);
+  }
+}
diff --git a/src/theme/Navbar/index.tsx b/src/theme/Navbar/index.tsx
new file mode 100644
index 00000000..6c708077
--- /dev/null
+++ b/src/theme/Navbar/index.tsx
@@ -0,0 +1,12 @@
+import React, { type ReactNode } from 'react';
+import NavbarLayout from '@theme/Navbar/Layout';
+
+
+export default function Navbar(): ReactNode {
+  return (
+    <NavbarLayout>
+    <></>
+    </NavbarLayout>
+
+  );
+}
diff --git a/src/utils/getResourceType.ts b/src/utils/getResourceType.ts
new file mode 100644
index 00000000..aea67fc4
--- /dev/null
+++ b/src/utils/getResourceType.ts
@@ -0,0 +1,13 @@
+const resourceTypeMap = {
+	post: "Blog",
+	ebook: "eBook",
+	event: "Event",
+	podcast: "Podcast",
+	article: "Article",
+};
+
+export type ResourceType = keyof typeof resourceTypeMap;
+
+export default function getResourceType(type: ResourceType): string {
+	return resourceTypeMap[type] || type;
+}
diff --git a/src/utils/highlightTextContent.ts b/src/utils/highlightTextContent.ts
new file mode 100644
index 00000000..ea56c751
--- /dev/null
+++ b/src/utils/highlightTextContent.ts
@@ -0,0 +1,6 @@
+export default function highlightTextContent(text: string, className = "") {
+	if (text) {
+		return text.replace(/\|(.*?)\|/g, `<span class="${className}">$1</span>`);
+	}
+	return null;
+}
diff --git a/static/.nojekyll b/static/.nojekyll
new file mode 100644
index 00000000..e69de29b
diff --git a/static/fonts/OpenSauceTwo-Medium.woff2 b/static/fonts/OpenSauceTwo-Medium.woff2
new file mode 100644
index 00000000..73ae73cd
Binary files /dev/null and b/static/fonts/OpenSauceTwo-Medium.woff2 differ
diff --git a/static/fonts/OpenSauceTwo-Regular.woff2 b/static/fonts/OpenSauceTwo-Regular.woff2
new file mode 100644
index 00000000..8bd8a68a
Binary files /dev/null and b/static/fonts/OpenSauceTwo-Regular.woff2 differ
diff --git a/static/img/apple-touch-icon.png b/static/img/apple-touch-icon.png
new file mode 100644
index 00000000..0cdd45e6
Binary files /dev/null and b/static/img/apple-touch-icon.png differ
diff --git a/static/img/docusaurus.png b/static/img/docusaurus.png
new file mode 100644
index 00000000..0cdd45e6
Binary files /dev/null and b/static/img/docusaurus.png differ
diff --git a/static/img/favicon.ico b/static/img/favicon.ico
new file mode 100644
index 00000000..a9982979
Binary files /dev/null and b/static/img/favicon.ico differ
diff --git a/static/img/favicon.svg b/static/img/favicon.svg
new file mode 100644
index 00000000..feed9b74
--- /dev/null
+++ b/static/img/favicon.svg
@@ -0,0 +1,6 @@
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svgjs="http://svgjs.dev/svgjs" width="256" height="256"><svg width="256" height="256" viewBox="0 0 256 256" fill="none" xmlns="http://www.w3.org/2000/svg">
+<rect width="256" height="256" rx="36" fill="#02060A"></rect>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M91.8627 39C84.146 39 77.8904 45.2556 77.8904 52.9723C77.8904 58.9782 81.6797 64.099 86.9979 66.0745L86.9979 86.9817L66.078 86.9817C64.1052 81.6584 58.9818 77.8646 52.9723 77.8646C45.2556 77.8646 39 84.1202 39 91.8369C39 99.5536 45.2556 105.809 52.9723 105.809C58.9783 105.809 64.0992 102.02 66.0746 96.7014L86.9979 96.7015L86.998 151.033C81.6797 153.009 77.8904 158.13 77.8904 164.135C77.8904 166.214 78.3441 168.186 79.1578 169.958L58.8011 190.315C57.027 189.5 55.0528 189.045 52.9723 189.045C45.2556 189.045 39 195.3 39 203.017C39 210.734 45.2556 216.99 52.9723 216.99C60.6891 216.99 66.9447 210.734 66.9447 203.017C66.9447 200.936 66.4899 198.962 65.6742 197.188L86.0274 176.835C87.8032 177.652 89.7797 178.108 91.8627 178.108C97.8687 178.108 102.99 174.318 104.965 169L159.287 169L159.287 189.912C153.964 191.886 150.172 197.008 150.172 203.017C150.172 210.734 156.427 216.989 164.144 216.989C171.861 216.989 178.116 210.734 178.116 203.017C178.116 197.01 174.326 191.889 169.007 189.914L169.006 169L189.925 169C191.901 174.318 197.022 178.108 203.028 178.108C210.744 178.108 217 171.852 217 164.135C217 156.419 210.744 150.163 203.028 150.163C197.018 150.163 191.895 153.957 189.922 159.28L169.006 159.28L169.006 104.94C174.326 102.965 178.116 97.8437 178.116 91.8369C178.116 89.7642 177.665 87.797 176.855 86.028L197.206 65.6776C198.978 66.4911 200.95 66.9447 203.028 66.9447C210.744 66.9447 217 60.689 217 52.9723C217 45.2556 210.744 39 203.028 39C195.311 39 189.055 45.2556 189.055 52.9723C189.055 55.0556 189.511 57.0325 190.329 58.8085L169.993 79.1441C168.214 78.3228 166.232 77.8646 164.144 77.8646C158.135 77.8646 153.011 81.6584 151.038 86.9817L96.7177 86.9817L96.7177 66.0781C102.041 64.1053 105.835 58.9819 105.835 52.9723C105.835 45.2556 99.5794 39 91.8627 39ZM96.7177 151.03L96.7177 96.7015L151.042 96.7015C152.455 100.507 155.48 103.53 159.287 104.942L159.287 159.28L104.968 159.28C103.556 155.469 100.529 152.442 96.7177 151.03Z" fill="white"></path>
+</svg><style>@media (prefers-color-scheme: light) { :root { filter: none; } }
+@media (prefers-color-scheme: dark) { :root { filter: none; } }
+</style></svg>
\ No newline at end of file
diff --git a/static/img/logo.svg b/static/img/logo.svg
new file mode 100644
index 00000000..4150e679
--- /dev/null
+++ b/static/img/logo.svg
@@ -0,0 +1 @@
+<svg width="130" height="21" viewBox="0 0 130 21" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M11.54 9.916c.29.734.43 1.52.408 2.31v8.466H8.523v-7.81c.01-.43-.053-.86-.184-1.268a2.54 2.54 0 0 0-.489-.777 1.883 1.883 0 0 0-.693-.43 3.11 3.11 0 0 0-.877-.122 3.428 3.428 0 0 0-1.142.184 2.16 2.16 0 0 0-.877.593 2.949 2.949 0 0 0-.612 1.083 5.777 5.777 0 0 0-.224 1.677v6.87H0V7.299h3.425v.9c.236-.199.488-.377.755-.532a5.628 5.628 0 0 1 2.772-.674 5.73 5.73 0 0 1 1.876.306 4.275 4.275 0 0 1 1.611.96 4.36 4.36 0 0 1 1.101 1.657zm15.23 1.615a9.42 9.42 0 0 1 .347 2.495v1.37h-9.766c.037.231.12.454.245.654.181.375.447.704.774.961.34.279.726.494 1.142.634.439.156.9.232 1.366.225a2.831 2.831 0 0 0 1.59-.41c.515-.329.97-.743 1.346-1.226l.346-.409 2.61 2.004-.326.45c-1.407 1.799-3.385 2.719-5.873 2.719a7.45 7.45 0 0 1-2.834-.531 6.102 6.102 0 0 1-2.18-1.493 6.692 6.692 0 0 1-1.367-2.228 7.985 7.985 0 0 1-.469-2.74c-.002-.944.17-1.88.51-2.76a6.875 6.875 0 0 1 1.447-2.228 6.58 6.58 0 0 1 2.181-1.493 7.071 7.071 0 0 1 2.732-.531c1.183 0 2.181.204 3.018.633a5.904 5.904 0 0 1 2.018 1.635 6.25 6.25 0 0 1 1.142 2.27h.002zm-3.282.9a7.187 7.187 0 0 0-.163-.696 2.454 2.454 0 0 0-.55-.92 2.2 2.2 0 0 0-.897-.614 3.5 3.5 0 0 0-2.672.041c-.383.168-.73.411-1.02.715-.278.282-.5.615-.652.982a2.308 2.308 0 0 0-.162.49h6.116v.002zm11.499 5.214a3.433 3.433 0 0 1-.775.081 1.406 1.406 0 0 1-.693-.143 1.074 1.074 0 0 1-.326-.409 2.057 2.057 0 0 1-.143-.736c-.021-.327-.041-.654-.041-.982v-5.03h3.344V7.298h-3.344V3.863h-3.425v3.435h-2.162v3.128h2.162v5.848c-.004.512.024 1.025.081 1.534a3.73 3.73 0 0 0 .47 1.575c.318.515.778.927 1.325 1.185.571.287 1.325.43 2.324.43.368-.004.736-.03 1.1-.082a3.545 3.545 0 0 0 1.264-.409l.286-.143V16.95l-.836.49a1.96 1.96 0 0 1-.612.206zm16.841-6.4a8.2 8.2 0 0 1 .47 2.76 7.917 7.917 0 0 1-.47 2.72 6.682 6.682 0 0 1-1.365 2.228 6.263 6.263 0 0 1-2.162 1.513 7.225 7.225 0 0 1-2.793.53 6.249 6.249 0 0 1-2.63-.592 4.145 4.145 0 0 1-1.122-.695v.982H38.33V0h3.425v8.26c.32-.258.67-.478 1.04-.655a6.273 6.273 0 0 1 2.711-.613 7.243 7.243 0 0 1 2.793.53c.812.35 1.546.858 2.162 1.494a7.288 7.288 0 0 1 1.365 2.228h.002zm-3.364 1.227a3.021 3.021 0 0 0-.693-1.165 3.231 3.231 0 0 0-1.08-.757 4.122 4.122 0 0 0-2.916 0 3.211 3.211 0 0 0-1.08.757c-.31.335-.546.733-.693 1.165a4.503 4.503 0 0 0-.245 1.534c-.005.521.077 1.04.245 1.534.152.425.387.814.693 1.145.299.33.669.589 1.08.757.935.38 1.981.38 2.915 0a2.94 2.94 0 0 0 1.08-.757c.313-.326.55-.717.694-1.145.167-.493.25-1.013.245-1.534a4.559 4.559 0 0 0-.245-1.534zm17.209 6.502a7.223 7.223 0 0 1-10.032 0 7.064 7.064 0 0 1-2.038-4.969 6.97 6.97 0 0 1 4.282-6.46 7.24 7.24 0 0 1 5.546 0 7.015 7.015 0 0 1 4.282 6.46 7.067 7.067 0 0 1-2.038 4.969h-.002zm-1.795-6.502a3.26 3.26 0 0 0-.672-1.165 3.42 3.42 0 0 0-1.08-.757 4.19 4.19 0 0 0-2.936 0 3.42 3.42 0 0 0-1.08.757 3.259 3.259 0 0 0-.673 1.165 4.047 4.047 0 0 0-.265 1.534 4.193 4.193 0 0 0 .265 1.534c.146.423.374.813.672 1.145.303.326.672.584 1.08.757a3.905 3.905 0 0 0 2.937 0c.41-.173.777-.43 1.08-.757.298-.332.527-.722.672-1.145a4.57 4.57 0 0 0 0-3.068zM81.045 7.3h-4.2l-2.63 3.926-2.671-3.926H67.14l4.77 6.276-5.382 7.116h4.26l3.324-4.744 3.344 4.744h4.383l-5.383-7.115 4.587-6.277h.002z" fill="#fff"/><path d="M85.652 0h3.425V20.69h-3.425V0zm16.904 20.078l.061.613h-3.181l-.04-.51c-.022-.164-.022-.328-.041-.491a4.7 4.7 0 0 1-1.142.777c-1.422.591-3 .693-4.485.286a4.726 4.726 0 0 1-1.53-.798 4.1 4.1 0 0 1-1.08-1.35 4.373 4.373 0 0 1-.388-1.84c-.03-.81.19-1.61.632-2.29a4.45 4.45 0 0 1 1.63-1.492 7.26 7.26 0 0 1 2.325-.777c.893-.168 1.802-.251 2.711-.246h1.163a2.98 2.98 0 0 0-.143-.695 2.274 2.274 0 0 0-.428-.655c-.207-.2-.449-.36-.714-.47a2.95 2.95 0 0 0-1.1-.184c-.35-.005-.7.036-1.04.122-.28.07-.553.166-.816.287-.229.109-.447.24-.652.388l-.632.49-.408.307-2.12-2.208.428-.389a6.851 6.851 0 0 1 2.467-1.472 8.044 8.044 0 0 1 2.753-.49 7.517 7.517 0 0 1 2.487.368 5.094 5.094 0 0 1 1.795 1.022c.458.422.819.938 1.06 1.513.21.555.32 1.144.326 1.738v6.276c0 .43 0 .818.021 1.166.021.347.041.695.082 1.002l-.001.002zm-4.058-5.296c-.53 0-1.08.04-1.631.082a6.02 6.02 0 0 0-1.447.327 2.476 2.476 0 0 0-.959.593c-.206.212-.317.5-.305.797 0 .696.081.839.47 1.084.387.245.917.368 1.63.368.476.018.95-.073 1.387-.266a2.33 2.33 0 0 0 .876-.695c.236-.28.41-.608.51-.961.104-.36.159-.73.163-1.104v-.225h-.694zm19.593-3.537c.313.886.472 1.82.469 2.76a7.928 7.928 0 0 1-.469 2.72 6.692 6.692 0 0 1-1.366 2.228 6.265 6.265 0 0 1-2.161 1.513 7.208 7.208 0 0 1-2.773.53 6.339 6.339 0 0 1-2.65-.592 4.136 4.136 0 0 1-1.122-.695v.981h-3.425V0h3.425v8.26c.32-.258.67-.478 1.039-.655a6.293 6.293 0 0 1 2.732-.614 7.2 7.2 0 0 1 2.773.532 6.508 6.508 0 0 1 2.161 1.493 7.304 7.304 0 0 1 1.366 2.228h.001zm-3.364 1.227a3.027 3.027 0 0 0-.693-1.165 3.242 3.242 0 0 0-1.08-.758 4.124 4.124 0 0 0-2.916 0 3.222 3.222 0 0 0-1.08.758 3.292 3.292 0 0 0-.693 1.165 4.494 4.494 0 0 0-.245 1.534c-.005.521.077 1.04.245 1.534.153.425.388.814.693 1.145.299.33.669.589 1.08.757a3.862 3.862 0 0 0 2.916 0 2.947 2.947 0 0 0 1.08-.757 3.08 3.08 0 0 0 .693-1.145c.167-.493.25-1.013.245-1.534a4.547 4.547 0 0 0-.245-1.534zm14.965 2.433a3.464 3.464 0 0 0-.896-1.185 3.955 3.955 0 0 0-1.306-.777c-.477-.193-.968-.35-1.468-.47h-.021l-.938-.185a3.87 3.87 0 0 1-.897-.265 2.264 2.264 0 0 1-.672-.45.571.571 0 0 1-.184-.47.593.593 0 0 1 .327-.553c.358-.188.758-.28 1.162-.265a2.47 2.47 0 0 1 1.223.265 3 3 0 0 1 .856.737l.346.43 2.631-2.004-.265-.43a4.2 4.2 0 0 0-2.08-1.778 6.546 6.546 0 0 0-2.569-.512 6.395 6.395 0 0 0-1.855.266 5.125 5.125 0 0 0-1.651.777 4.067 4.067 0 0 0-1.223 1.35 3.754 3.754 0 0 0-.47 1.942c-.017.601.108 1.197.367 1.738.234.458.569.856.979 1.166.408.303.862.538 1.346.695.463.163.952.306 1.468.43h.021l.877.184c.296.061.583.157.856.286.227.088.43.228.591.41.131.119.199.293.184.47a.511.511 0 0 1-.122.347c-.104.141-.236.26-.388.347a2.713 2.713 0 0 1-.653.225 4.716 4.716 0 0 1-.774.081 2.479 2.479 0 0 1-1.407-.368 7.38 7.38 0 0 1-1.182-.92l-.346-.368-2.549 2.127.306.43a5.513 5.513 0 0 0 2.304 1.88 7.367 7.367 0 0 0 2.875.512 7.596 7.596 0 0 0 1.916-.225 5.083 5.083 0 0 0 1.774-.736 4.48 4.48 0 0 0 1.305-1.39 3.937 3.937 0 0 0 .51-2.066 4.243 4.243 0 0 0-.306-1.677h-.002z" fill="#00F2D4"/></svg>
\ No newline at end of file
diff --git a/static/img/netbox-social-card.png b/static/img/netbox-social-card.png
new file mode 100644
index 00000000..90131834
Binary files /dev/null and b/static/img/netbox-social-card.png differ
diff --git a/static/img/site.webmanifest b/static/img/site.webmanifest
new file mode 100644
index 00000000..ccf313a3
--- /dev/null
+++ b/static/img/site.webmanifest
@@ -0,0 +1,21 @@
+{
+  "name": "MyWebSite",
+  "short_name": "MySite",
+  "icons": [
+    {
+      "src": "/web-app-manifest-192x192.png",
+      "sizes": "192x192",
+      "type": "image/png",
+      "purpose": "maskable"
+    },
+    {
+      "src": "/web-app-manifest-512x512.png",
+      "sizes": "512x512",
+      "type": "image/png",
+      "purpose": "maskable"
+    }
+  ],
+  "theme_color": "#ffffff",
+  "background_color": "#ffffff",
+  "display": "standalone"
+}
\ No newline at end of file
diff --git a/tailwind.config.js b/tailwind.config.js
new file mode 100644
index 00000000..5c67238d
--- /dev/null
+++ b/tailwind.config.js
@@ -0,0 +1,67 @@
+/** @type {import('tailwindcss').Config} */
+module.exports = {
+  content: [
+    "./src/**/*.{js,jsx,ts,tsx,md,mdx}",
+    "./docs/**/*.{md,mdx}",
+  ],
+  darkMode: ['class', '[data-theme="dark"]'],
+  theme: {
+		extend: {
+			fontFamily: {
+				openSauceTwo: [
+					"OpenSauceTwo",
+					"ui-sans-serif",
+					"system-ui",
+					"sans-serif",
+					"Apple Color Emoji",
+					"Segoe UI Emoji",
+					"Segoe UI Symbol",
+					"Noto Color Emoji",
+				],
+			},
+			colors: {
+				teal: "#00f2d4",
+				darkTeal: "#012229",
+				"grey-16": "#02060a",
+				"grey-15": "#090b0b",
+				"grey-14": "#131515",
+				"grey-13": "#161a1a",
+				"grey-12": "#1e2323",
+				"grey-11": "#252929",
+				"grey-10": "#3f4243",
+				"grey-9": "#525759",
+				"grey-8": "#6e7578",
+				"grey-7": "#8c9396",
+				"grey-6": "#989ca0",
+				"grey-5": "#b3b6b7",
+				"grey-4": "#c4c7c8",
+				"grey-3": "#cfd4d4",
+				"grey-2": "#e3e6e6",
+				"grey-1": "#f7f7f7",
+				// Todo - Add other colors, secondary teal?
+				blue: "#141638",
+			},
+			spacing: {
+				88: "5.5rem",
+				164: "10.25rem",
+				196: "12.25rem",
+			},
+			screens: {
+				smLarge: "414px",
+			},
+			keyframes: {
+				float: {
+					"0%, 100%": { transform: "translateY(-4px)" },
+					"50%": { transform: "translateY(4px)" },
+				},
+			},
+			animation: {
+				float: "float 3s ease-in-out infinite",
+			},
+		},
+	},
+  plugins: [],
+  corePlugins: {
+    preflight: false,
+  },
+}
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 00000000..920d7a65
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,8 @@
+{
+  // This file is not used in compilation. It is here just for a nice editor experience.
+  "extends": "@docusaurus/tsconfig",
+  "compilerOptions": {
+    "baseUrl": "."
+  },
+  "exclude": [".docusaurus", "build"]
+}
diff --git a/vercel.json b/vercel.json
new file mode 100644
index 00000000..e0355f28
--- /dev/null
+++ b/vercel.json
@@ -0,0 +1,464 @@
+{
+  "redirects": [
+    {
+      "source": "/",
+      "destination": "/docs/netbox",
+      "permanent": true
+    },
+    {
+      "source": "/docs",
+      "destination": "/docs/netbox",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-enterprise/nbs-backups",
+      "destination": "/docs/console/netbox-enterprise/nbe-backups/",
+      "permanent": true
+    },
+    {
+      "source": "/index",
+      "destination": "/docs/console/index/",
+      "permanent": true
+    },
+    {
+      "source": "/NetBox Cloud/migrating-to-netbox-cloud",
+      "destination": "/docs/console/NetBox Cloud/migrating-to-netbox-cloud/",
+      "permanent": true
+    },
+    {
+      "source": "/Administration Console/console-access",
+      "destination": "/docs/console/Administration Console/console-access/",
+      "permanent": true
+    },
+    {
+      "source": "/Administration Console/set_up_2fa",
+      "destination": "/docs/console/Administration Console/set_up_2fa/",
+      "permanent": true
+    },
+    {
+      "source": "/Administration Console/retrieving-nbc-credentials",
+      "destination": "/docs/console/Administration Console/retrieving-nbc-credentials/",
+      "permanent": true
+    },
+    {
+      "source": "/Administration Console/console-admin-accounts",
+      "destination": "/docs/console/Administration Console/console-admin-accounts/",
+      "permanent": true
+    },
+    {
+      "source": "/Administration Console/netbox-cloud-plugins",
+      "destination": "/docs/console/Administration Console/netbox-cloud-plugins/",
+      "permanent": true
+    },
+    {
+      "source": "/Administration Console/working_with_database_backups",
+      "destination": "/docs/console/Administration Console/working_with_database_backups/",
+      "permanent": true
+    },
+    {
+      "source": "/Administration Console/upgrading-nbc",
+      "destination": "/docs/console/Administration Console/upgrading-nbc/",
+      "permanent": true
+    },
+    {
+      "source": "/Administration Console/managing-hostnames",
+      "destination": "/docs/console/Administration Console/managing-hostnames/",
+      "permanent": true
+    },
+    {
+      "source": "/Administration Console/prefix-lists",
+      "destination": "/docs/console/Administration Console/prefix-lists/",
+      "permanent": true
+    },
+    {
+      "source": "/Administration Console/public-ip-addressing",
+      "destination": "/docs/console/Administration Console/public-ip-addressing/",
+      "permanent": true
+    },
+    {
+      "source": "/Administration Console/azure-ad-sso-setup",
+      "destination": "/docs/console/Administration Console/azure-ad-sso-setup/",
+      "permanent": true
+    },
+    {
+      "source": "/Administration Console/azure-group-mapping",
+      "destination": "/docs/console/Administration Console/azure-group-mapping/",
+      "permanent": true
+    },
+    {
+      "source": "/Administration Console/okta-sso-setup",
+      "destination": "/docs/console/Administration Console/okta-sso-setup/",
+      "permanent": true
+    },
+    {
+      "source": "/Administration Console/okta-group-mapping",
+      "destination": "/docs/console/Administration Console/okta-group-mapping/",
+      "permanent": true
+    },
+    {
+      "source": "/Administration Console/saml-sso-setup",
+      "destination": "/docs/console/Administration Console/saml-sso-setup/",
+      "permanent": true
+    },
+    {
+      "source": "/Administration Console/saml-group-map",
+      "destination": "/docs/console/Administration Console/saml-group-map/",
+      "permanent": true
+    },
+    {
+      "source": "/Administration Console/free-plan-features",
+      "destination": "/docs/console/Administration Console/free-plan-features/",
+      "permanent": true
+    },
+    {
+      "source": "/Administration Console/free-plan-new-user",
+      "destination": "/docs/console/Administration Console/free-plan-new-user/",
+      "permanent": true
+    },
+    {
+      "source": "/cloud-connectivity/do-i-need-cloud-connectivity",
+      "destination": "/docs/console/cloud-connectivity/do-i-need-cloud-connectivity/",
+      "permanent": true
+    },
+    {
+      "source": "/cloud-connectivity/which-connectivity-option",
+      "destination": "/docs/console/cloud-connectivity/which-connectivity-option/",
+      "permanent": true
+    },
+    {
+      "source": "/cloud-connectivity/internet-delivery",
+      "destination": "/docs/console/cloud-connectivity/internet-delivery/",
+      "permanent": true
+    },
+    {
+      "source": "/cloud-connectivity/aws-private-link",
+      "destination": "/docs/console/cloud-connectivity/aws-private-link/",
+      "permanent": true
+    },
+    {
+      "source": "/cloud-connectivity/ipsec-vpn-tunnels",
+      "destination": "/docs/console/cloud-connectivity/ipsec-vpn-tunnels/",
+      "permanent": true
+    },
+    {
+      "source": "/cloud-connectivity/aws-direct-connect",
+      "destination": "/docs/console/cloud-connectivity/aws-direct-connect/",
+      "permanent": true
+    },
+    {
+      "source": "/cloud-connectivity/aws-direct-connect-multi-region",
+      "destination": "/docs/console/cloud-connectivity/aws-direct-connect-multi-region/",
+      "permanent": true
+    },
+    {
+      "source": "/cloud-connectivity/cloud-connectivity-faq",
+      "destination": "/docs/console/cloud-connectivity/cloud-connectivity-faq/",
+      "permanent": true
+    },
+    {
+      "source": "/maintenance",
+      "destination": "/docs/console/maintenance/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-enterprise/nbe-overview",
+      "destination": "/docs/console/netbox-enterprise/nbe-overview/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-enterprise/nbe-ec-requirements",
+      "destination": "/docs/console/netbox-enterprise/nbe-ec-requirements/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-enterprise/nbe-ec-requirements-rhel",
+      "destination": "/docs/console/netbox-enterprise/nbe-ec-requirements-rhel/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-enterprise/nbe-ec-linux-changes",
+      "destination": "/docs/console/netbox-enterprise/nbe-ec-linux-changes/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-enterprise/nbe-ec-installation",
+      "destination": "/docs/console/netbox-enterprise/nbe-ec-installation/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-enterprise/nbe-migrating",
+      "destination": "/docs/console/netbox-enterprise/nbe-migrating/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-enterprise/nbe-ec-built-in-plugins",
+      "destination": "/docs/console/netbox-enterprise/nbe-ec-built-in-plugins/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-enterprise/nbe-ec-custom-plugins",
+      "destination": "/docs/console/netbox-enterprise/nbe-ec-custom-plugins/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-enterprise/nbe-azure-sso",
+      "destination": "/docs/console/netbox-enterprise/nbe-azure-sso/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-enterprise/nbe-azure-group-mapping",
+      "destination": "/docs/console/netbox-enterprise/nbe-azure-group-mapping/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-enterprise/nbe-saml",
+      "destination": "/docs/console/netbox-enterprise/nbe-saml/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-enterprise/nbe-saml-group-map",
+      "destination": "/docs/console/netbox-enterprise/nbe-saml-group-map/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-enterprise/nbe-ldap",
+      "destination": "/docs/console/netbox-enterprise/nbe-ldap/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-enterprise/nbe-tls-ingress",
+      "destination": "/docs/console/netbox-enterprise/nbe-tls-ingress/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-enterprise/nbe-troubleshooting",
+      "destination": "/docs/console/netbox-enterprise/nbe-troubleshooting/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-enterprise/nbe-release-notes",
+      "destination": "/docs/console/netbox-enterprise/nbe-release-notes/",
+      "permanent": true
+    },
+    {
+      "source": "/discovery-assurance",
+      "destination": "/docs/console/discovery-assurance/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-discovery/quickstart-guide",
+      "destination": "/docs/console/netbox-discovery/quickstart-guide/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-discovery/",
+      "destination": "/docs/console/netbox-discovery/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-discovery/agent/",
+      "destination": "/docs/console/netbox-discovery/agent/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-discovery/agent/get-started",
+      "destination": "/docs/console/netbox-discovery/agent/get-started/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-discovery/agent/configuration-file",
+      "destination": "/docs/console/netbox-discovery/agent/configuration-file/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-discovery/agent/network_discovery",
+      "destination": "/docs/console/netbox-discovery/agent/network_discovery/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-discovery/agent/device_discovery",
+      "destination": "/docs/console/netbox-discovery/agent/device_discovery/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-assurance/",
+      "destination": "/docs/console/netbox-assurance/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-integrations/netbox-ansible-collection",
+      "destination": "/docs/console/netbox-integrations/netbox-ansible-collection/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-integrations/pyats",
+      "destination": "/docs/console/netbox-integrations/pyats/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-integrations/servicenow/",
+      "destination": "/docs/console/netbox-integrations/servicenow/",
+      "permanent": true
+    },
+    {
+      "source": "/sdks/pynetbox",
+      "destination": "/docs/console/sdks/pynetbox/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-extensions/branching/",
+      "destination": "/docs/console/netbox-extensions/branching/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-extensions/branching/configuration",
+      "destination": "/docs/console/netbox-extensions/branching/configuration/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-extensions/branching/using-branches/creating-a-branch",
+      "destination": "/docs/console/netbox-extensions/branching/using-branches/creating-a-branch/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-extensions/branching/using-branches/syncing-merging",
+      "destination": "/docs/console/netbox-extensions/branching/using-branches/syncing-merging/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-extensions/branching/using-branches/reverting-a-branch",
+      "destination": "/docs/console/netbox-extensions/branching/using-branches/reverting-a-branch/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-extensions/branching/using-branches/api",
+      "destination": "/docs/console/netbox-extensions/branching/using-branches/api/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-extensions/branching/models/branch",
+      "destination": "/docs/console/netbox-extensions/branching/models/branch/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-extensions/branching/models/branchevent",
+      "destination": "/docs/console/netbox-extensions/branching/models/branchevent/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-extensions/branching/models/changediff",
+      "destination": "/docs/console/netbox-extensions/branching/models/changediff/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-extensions/branching/models/objectchange",
+      "destination": "/docs/console/netbox-extensions/branching/models/objectchange/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-extensions/branching/changelog",
+      "destination": "/docs/console/netbox-extensions/branching/changelog/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-extensions/changes/",
+      "destination": "/docs/console/netbox-extensions/changes/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-extensions/changes/configuration",
+      "destination": "/docs/console/netbox-extensions/changes/configuration/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-extensions/changes/models/changerequest",
+      "destination": "/docs/console/netbox-extensions/changes/models/changerequest/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-extensions/changes/models/comment",
+      "destination": "/docs/console/netbox-extensions/changes/models/comment/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-extensions/changes/models/commentreply",
+      "destination": "/docs/console/netbox-extensions/changes/models/commentreply/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-extensions/changes/models/policy",
+      "destination": "/docs/console/netbox-extensions/changes/models/policy/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-extensions/changes/models/policyrule",
+      "destination": "/docs/console/netbox-extensions/changes/models/policyrule/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-extensions/changes/models/review",
+      "destination": "/docs/console/netbox-extensions/changes/models/review/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-extensions/changes/changelog",
+      "destination": "/docs/console/netbox-extensions/changes/changelog/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-extensions/diode/",
+      "destination": "/docs/console/netbox-extensions/diode/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-extensions/diode/diode-get-started",
+      "destination": "/docs/console/netbox-extensions/diode/diode-get-started/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-extensions/diode/diode-plugin",
+      "destination": "/docs/console/netbox-extensions/diode/diode-plugin/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-extensions/diode/diode-server",
+      "destination": "/docs/console/netbox-extensions/diode/diode-server/",
+      "permanent": true
+    },
+    {
+      "source": "/netbox-extensions/diode/diode-client",
+      "destination": "/docs/console/netbox-extensions/diode/diode-client/",
+      "permanent": true
+    },
+    {
+      "source": "/product_feature_lifecycle",
+      "destination": "/docs/console/product_feature_lifecycle/",
+      "permanent": true
+    },
+    {
+      "source": "/docs/netbox/media/screenshots/home-light.png",
+      "destination": "https://raw.githubusercontent.com/netbox-community/netbox/0c6726d40f7ac0648bea42a83cd28a8025280c38/docs/media/screenshots/home-light.png",
+      "permanent": true
+    },
+    {
+      "source": "/docs/netbox/media/screenshots/home-dark.png",
+      "destination": "https://raw.githubusercontent.com/netbox-community/netbox/main/docs/media/screenshots/home-dark.png",
+      "permanent": true
+    },
+    {
+      "source": "/docs/netbox/netbox_logo_light.svg",
+      "destination": "https://raw.githubusercontent.com/netbox-community/netbox/main/docs/netbox_logo_light.svg",
+      "permanent": true
+    },
+    {
+      "source": "/docs/netbox/netbox_logo_dark.svg",
+      "destination": "https://raw.githubusercontent.com/netbox-community/netbox/main/docs/netbox_logo_dark.svg",
+      "permanent": true
+    },
+    {
+      "source": "/docs/netbox/en/stable",
+      "destination": "/docs/netbox",
+      "permanent": true
+    }
+  ]
+}
\ No newline at end of file
diff --git a/versions.json b/versions.json
deleted file mode 100644
index 547108d8..00000000
--- a/versions.json
+++ /dev/null
@@ -1,36 +0,0 @@
-{
-  "versions": [
-    {
-      "version": "v1.10", 
-      "branch": "main",
-      "title": "v1.10 (Current)",
-      "default": true,
-      "status": "current"
-    },
-    {
-      "version": "v1.9", 
-      "branch": "v1.9",
-      "title": "v1.9 (Stable)",
-      "default": false,
-      "status": "stable"
-    }
-  ],
-  "default_version": "v1.10",
-  "stable_version": "v1.10",
-  "future_versions": [
-    {
-      "version": "v1.11",
-      "branch": "v1.11",
-      "title": "v1.11 (Beta) - NetBox Enterprise with Helm",
-      "description": "NetBox Enterprise with Helm capabilities",
-      "status": "beta"
-    },
-    {
-      "version": "v1.12",
-      "branch": "v1.12",
-      "title": "v1.12 (Alpha) - NetBox Enterprise with HA and NetBox v4.3.2",
-      "description": "NetBox Enterprise with High Availability and NetBox v4.3.2",
-      "status": "alpha"
-    }
-  ]
-} 
\ No newline at end of file
diff --git a/yarn.lock b/yarn.lock
new file mode 100644
index 00000000..bdb34a2c
--- /dev/null
+++ b/yarn.lock
@@ -0,0 +1,10429 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@algolia/autocomplete-core@1.17.9":
+  version "1.17.9"
+  resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.17.9.tgz#83374c47dc72482aa45d6b953e89377047f0dcdc"
+  integrity sha512-O7BxrpLDPJWWHv/DLA9DRFWs+iY1uOJZkqUwjS5HSZAGcl0hIVCQ97LTLewiZmZ402JYUrun+8NqFP+hCknlbQ==
+  dependencies:
+    "@algolia/autocomplete-plugin-algolia-insights" "1.17.9"
+    "@algolia/autocomplete-shared" "1.17.9"
+
+"@algolia/autocomplete-plugin-algolia-insights@1.17.9":
+  version "1.17.9"
+  resolved "https://registry.yarnpkg.com/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.9.tgz#74c86024d09d09e8bfa3dd90b844b77d9f9947b6"
+  integrity sha512-u1fEHkCbWF92DBeB/KHeMacsjsoI0wFhjZtlCq2ddZbAehshbZST6Hs0Avkc0s+4UyBGbMDnSuXHLuvRWK5iDQ==
+  dependencies:
+    "@algolia/autocomplete-shared" "1.17.9"
+
+"@algolia/autocomplete-preset-algolia@1.17.9":
+  version "1.17.9"
+  resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.9.tgz#911f3250544eb8ea4096fcfb268f156b085321b5"
+  integrity sha512-Na1OuceSJeg8j7ZWn5ssMu/Ax3amtOwk76u4h5J4eK2Nx2KB5qt0Z4cOapCsxot9VcEN11ADV5aUSlQF4RhGjQ==
+  dependencies:
+    "@algolia/autocomplete-shared" "1.17.9"
+
+"@algolia/autocomplete-shared@1.17.9":
+  version "1.17.9"
+  resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.9.tgz#5f38868f7cb1d54b014b17a10fc4f7e79d427fa8"
+  integrity sha512-iDf05JDQ7I0b7JEA/9IektxN/80a2MZ1ToohfmNS3rfeuQnIKI3IJlIafD0xu4StbtQTghx9T3Maa97ytkXenQ==
+
+"@algolia/cache-common@4.25.0":
+  version "4.25.0"
+  resolved "https://registry.yarnpkg.com/@algolia/cache-common/-/cache-common-4.25.0.tgz#bec2672b8916c56b45a55f25b15e3481129324a0"
+  integrity sha512-Pjg6X0YntFbkhJdDFFodJc9zP/Em50g4bAxOI73y/qXH7pgi2aAZTfO5HEq2QCvJNTI2hInZnFtiuRi+PrwgMQ==
+
+"@algolia/client-abtesting@5.29.0":
+  version "5.29.0"
+  resolved "https://registry.yarnpkg.com/@algolia/client-abtesting/-/client-abtesting-5.29.0.tgz#af9928f3b206cc5224e30256ea27d4e4d6023f22"
+  integrity sha512-AM/6LYMSTnZvAT5IarLEKjYWOdV+Fb+LVs8JRq88jn8HH6bpVUtjWdOZXqX1hJRXuCAY8SdQfb7F8uEiMNXdYQ==
+  dependencies:
+    "@algolia/client-common" "5.29.0"
+    "@algolia/requester-browser-xhr" "5.29.0"
+    "@algolia/requester-fetch" "5.29.0"
+    "@algolia/requester-node-http" "5.29.0"
+
+"@algolia/client-analytics@5.29.0":
+  version "5.29.0"
+  resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-5.29.0.tgz#d71b2f6e6c77c390343ee0ab73806378adb295eb"
+  integrity sha512-La34HJh90l0waw3wl5zETO8TuukeUyjcXhmjYZL3CAPLggmKv74mobiGRIb+mmBENybiFDXf/BeKFLhuDYWMMQ==
+  dependencies:
+    "@algolia/client-common" "5.29.0"
+    "@algolia/requester-browser-xhr" "5.29.0"
+    "@algolia/requester-fetch" "5.29.0"
+    "@algolia/requester-node-http" "5.29.0"
+
+"@algolia/client-common@4.25.0":
+  version "4.25.0"
+  resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-4.25.0.tgz#a1b583d8d6744023d9a6d198b48845b8d420c7a9"
+  integrity sha512-BQphN6EF9O3dIsKHy3U0IE/bebUrMgkZrZJmlH14/x7ohjkCqbJYLibdIbhNGo+e+ID/VuiL9wyKHBHipzi5mg==
+  dependencies:
+    "@algolia/requester-common" "4.25.0"
+    "@algolia/transporter" "4.25.0"
+
+"@algolia/client-common@5.29.0":
+  version "5.29.0"
+  resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-5.29.0.tgz#0908e90c5dc881be08eab4e595bf981e23525474"
+  integrity sha512-T0lzJH/JiCxQYtCcnWy7Jf1w/qjGDXTi2npyF9B9UsTvXB97GRC6icyfXxe21mhYvhQcaB1EQ/J2575FXxi2rA==
+
+"@algolia/client-insights@5.29.0":
+  version "5.29.0"
+  resolved "https://registry.yarnpkg.com/@algolia/client-insights/-/client-insights-5.29.0.tgz#80ca3c3d16ff2fa78b3a6a091a10ae508977dffa"
+  integrity sha512-A39F1zmHY9aev0z4Rt3fTLcGN5AG1VsVUkVWy6yQG5BRDScktH+U5m3zXwThwniBTDV1HrPgiGHZeWb67GkR2Q==
+  dependencies:
+    "@algolia/client-common" "5.29.0"
+    "@algolia/requester-browser-xhr" "5.29.0"
+    "@algolia/requester-fetch" "5.29.0"
+    "@algolia/requester-node-http" "5.29.0"
+
+"@algolia/client-personalization@5.29.0":
+  version "5.29.0"
+  resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-5.29.0.tgz#1bc8882fe889ad25132794b7beecf1cfc0783acc"
+  integrity sha512-ibxmh2wKKrzu5du02gp8CLpRMeo+b/75e4ORct98CT7mIxuYFXowULwCd6cMMkz/R0LpKXIbTUl15UL5soaiUQ==
+  dependencies:
+    "@algolia/client-common" "5.29.0"
+    "@algolia/requester-browser-xhr" "5.29.0"
+    "@algolia/requester-fetch" "5.29.0"
+    "@algolia/requester-node-http" "5.29.0"
+
+"@algolia/client-query-suggestions@5.29.0":
+  version "5.29.0"
+  resolved "https://registry.yarnpkg.com/@algolia/client-query-suggestions/-/client-query-suggestions-5.29.0.tgz#784001417cee2ffde376f10074a477eef1eb095d"
+  integrity sha512-VZq4/AukOoJC2WSwF6J5sBtt+kImOoBwQc1nH3tgI+cxJBg7B77UsNC+jT6eP2dQCwGKBBRTmtPLUTDDnHpMgA==
+  dependencies:
+    "@algolia/client-common" "5.29.0"
+    "@algolia/requester-browser-xhr" "5.29.0"
+    "@algolia/requester-fetch" "5.29.0"
+    "@algolia/requester-node-http" "5.29.0"
+
+"@algolia/client-search@5.29.0":
+  version "5.29.0"
+  resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-5.29.0.tgz#91c9a036b6677d954cd87d9262850f73f145bf81"
+  integrity sha512-cZ0Iq3OzFUPpgszzDr1G1aJV5UMIZ4VygJ2Az252q4Rdf5cQMhYEIKArWY/oUjMhQmosM8ygOovNq7gvA9CdCg==
+  dependencies:
+    "@algolia/client-common" "5.29.0"
+    "@algolia/requester-browser-xhr" "5.29.0"
+    "@algolia/requester-fetch" "5.29.0"
+    "@algolia/requester-node-http" "5.29.0"
+
+"@algolia/client-search@^4.9.1":
+  version "4.25.0"
+  resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-4.25.0.tgz#bec1998176b63931ad514ca388aab3dc7bf1e27f"
+  integrity sha512-qnX/+lOS6IEJS1chirYBpE5S+YG6yKmX8mXANEeO37kVjtxEV8QmCfHS8RbCw6adqII9iI3OzMZBIH8Ahd/J+A==
+  dependencies:
+    "@algolia/client-common" "4.25.0"
+    "@algolia/requester-common" "4.25.0"
+    "@algolia/transporter" "4.25.0"
+
+"@algolia/events@^4.0.1":
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/@algolia/events/-/events-4.0.1.tgz#fd39e7477e7bc703d7f893b556f676c032af3950"
+  integrity sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==
+
+"@algolia/ingestion@1.29.0":
+  version "1.29.0"
+  resolved "https://registry.yarnpkg.com/@algolia/ingestion/-/ingestion-1.29.0.tgz#9d7f30a7161b1cb612309f8240aa471faac8a21f"
+  integrity sha512-scBXn0wO5tZCxmO6evfa7A3bGryfyOI3aoXqSQBj5SRvNYXaUlFWQ/iKI70gRe/82ICwE0ICXbHT/wIvxOW7vw==
+  dependencies:
+    "@algolia/client-common" "5.29.0"
+    "@algolia/requester-browser-xhr" "5.29.0"
+    "@algolia/requester-fetch" "5.29.0"
+    "@algolia/requester-node-http" "5.29.0"
+
+"@algolia/logger-common@4.25.0":
+  version "4.25.0"
+  resolved "https://registry.yarnpkg.com/@algolia/logger-common/-/logger-common-4.25.0.tgz#635147adcd68900c7ae2cd0e57c3ff2096557f8c"
+  integrity sha512-r7JpDeVXzUAObueHWihoJ1pjWyTtl49Je2Ns+ABtUa08d8BZG04bYclrm3mdUa668yyy92AXgS5Kh4mIpji1Gw==
+
+"@algolia/monitoring@1.29.0":
+  version "1.29.0"
+  resolved "https://registry.yarnpkg.com/@algolia/monitoring/-/monitoring-1.29.0.tgz#919f86b7c53f1ea7c78f4c0ed9bd7917c1ca3a67"
+  integrity sha512-FGWWG9jLFhsKB7YiDjM2dwQOYnWu//7Oxrb2vT96N7+s+hg1mdHHfHNRyEudWdxd4jkMhBjeqNA21VbTiOIPVg==
+  dependencies:
+    "@algolia/client-common" "5.29.0"
+    "@algolia/requester-browser-xhr" "5.29.0"
+    "@algolia/requester-fetch" "5.29.0"
+    "@algolia/requester-node-http" "5.29.0"
+
+"@algolia/recommend@5.29.0":
+  version "5.29.0"
+  resolved "https://registry.yarnpkg.com/@algolia/recommend/-/recommend-5.29.0.tgz#8f2e5fe2e43e6d1dfa488b4c095404e46d0e1b0c"
+  integrity sha512-xte5+mpdfEARAu61KXa4ewpjchoZuJlAlvQb8ptK6hgHlBHDnYooy1bmOFpokaAICrq/H9HpoqNUX71n+3249A==
+  dependencies:
+    "@algolia/client-common" "5.29.0"
+    "@algolia/requester-browser-xhr" "5.29.0"
+    "@algolia/requester-fetch" "5.29.0"
+    "@algolia/requester-node-http" "5.29.0"
+
+"@algolia/requester-browser-xhr@5.29.0":
+  version "5.29.0"
+  resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.29.0.tgz#c3cec914716160d3d972ff09b3b35093916cb5bb"
+  integrity sha512-og+7Em75aPHhahEUScq2HQ3J7ULN63Levtd87BYMpn6Im5d5cNhaC4QAUsXu6LWqxRPgh4G+i+wIb6tVhDhg2A==
+  dependencies:
+    "@algolia/client-common" "5.29.0"
+
+"@algolia/requester-common@4.25.0":
+  version "4.25.0"
+  resolved "https://registry.yarnpkg.com/@algolia/requester-common/-/requester-common-4.25.0.tgz#f983c8718a11c13b29a6812074c38fb7b708a4e1"
+  integrity sha512-reVatqXhzTvAMMrbCi4mLYTfvdtelIGhtuopH4hCzlLsHv0ekxEYMxqcDzd0rrB63i7zHONqD+DKul2wvrut2g==
+
+"@algolia/requester-fetch@5.29.0":
+  version "5.29.0"
+  resolved "https://registry.yarnpkg.com/@algolia/requester-fetch/-/requester-fetch-5.29.0.tgz#3d885d73ab116c4c1ae88e7e6fb3b022cba45ce8"
+  integrity sha512-JCxapz7neAy8hT/nQpCvOrI5JO8VyQ1kPvBiaXWNC1prVq0UMYHEL52o1BsPvtXfdQ7BVq19OIq6TjOI06mV/w==
+  dependencies:
+    "@algolia/client-common" "5.29.0"
+
+"@algolia/requester-node-http@5.29.0":
+  version "5.29.0"
+  resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-5.29.0.tgz#9e8fb975c392ba1a99b8774856cfc892ed17819e"
+  integrity sha512-lVBD81RBW5VTdEYgnzCz7Pf9j2H44aymCP+/eHGJu4vhU+1O8aKf3TVBgbQr5UM6xoe8IkR/B112XY6YIG2vtg==
+  dependencies:
+    "@algolia/client-common" "5.29.0"
+
+"@algolia/transporter@4.25.0":
+  version "4.25.0"
+  resolved "https://registry.yarnpkg.com/@algolia/transporter/-/transporter-4.25.0.tgz#10e9e8f9b2de6e7326df30d552afd68b98aa2bb9"
+  integrity sha512-4hJxS7M5bxLRWAq7qq+86LCKJ9jNxPIiZ1MITyHV2QIKO6Wiz92X8udMk+E9Eo7DJJDLsv5l5Gujpm1lT/xp9A==
+  dependencies:
+    "@algolia/cache-common" "4.25.0"
+    "@algolia/logger-common" "4.25.0"
+    "@algolia/requester-common" "4.25.0"
+
+"@alloc/quick-lru@^5.2.0":
+  version "5.2.0"
+  resolved "https://registry.yarnpkg.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30"
+  integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==
+
+"@ampproject/remapping@^2.2.0":
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4"
+  integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==
+  dependencies:
+    "@jridgewell/gen-mapping" "^0.3.5"
+    "@jridgewell/trace-mapping" "^0.3.24"
+
+"@antfu/install-pkg@^1.0.0":
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/@antfu/install-pkg/-/install-pkg-1.1.0.tgz#78fa036be1a6081b5a77a5cf59f50c7752b6ba26"
+  integrity sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==
+  dependencies:
+    package-manager-detector "^1.3.0"
+    tinyexec "^1.0.1"
+
+"@antfu/utils@^8.1.0":
+  version "8.1.1"
+  resolved "https://registry.yarnpkg.com/@antfu/utils/-/utils-8.1.1.tgz#95b1947d292a9a2efffba2081796dcaa05ecedfb"
+  integrity sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ==
+
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be"
+  integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==
+  dependencies:
+    "@babel/helper-validator-identifier" "^7.27.1"
+    js-tokens "^4.0.0"
+    picocolors "^1.1.1"
+
+"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.27.2":
+  version "7.27.5"
+  resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.27.5.tgz#7d0658ec1a8420fc866d1df1b03bea0e79934c82"
+  integrity sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg==
+
+"@babel/core@^7.21.3", "@babel/core@^7.25.9":
+  version "7.27.4"
+  resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.27.4.tgz#cc1fc55d0ce140a1828d1dd2a2eba285adbfb3ce"
+  integrity sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==
+  dependencies:
+    "@ampproject/remapping" "^2.2.0"
+    "@babel/code-frame" "^7.27.1"
+    "@babel/generator" "^7.27.3"
+    "@babel/helper-compilation-targets" "^7.27.2"
+    "@babel/helper-module-transforms" "^7.27.3"
+    "@babel/helpers" "^7.27.4"
+    "@babel/parser" "^7.27.4"
+    "@babel/template" "^7.27.2"
+    "@babel/traverse" "^7.27.4"
+    "@babel/types" "^7.27.3"
+    convert-source-map "^2.0.0"
+    debug "^4.1.0"
+    gensync "^1.0.0-beta.2"
+    json5 "^2.2.3"
+    semver "^6.3.1"
+
+"@babel/generator@^7.25.9", "@babel/generator@^7.27.3":
+  version "7.27.5"
+  resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.27.5.tgz#3eb01866b345ba261b04911020cbe22dd4be8c8c"
+  integrity sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==
+  dependencies:
+    "@babel/parser" "^7.27.5"
+    "@babel/types" "^7.27.3"
+    "@jridgewell/gen-mapping" "^0.3.5"
+    "@jridgewell/trace-mapping" "^0.3.25"
+    jsesc "^3.0.2"
+
+"@babel/helper-annotate-as-pure@^7.27.1":
+  version "7.27.3"
+  resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz#f31fd86b915fc4daf1f3ac6976c59be7084ed9c5"
+  integrity sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==
+  dependencies:
+    "@babel/types" "^7.27.3"
+
+"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.27.1", "@babel/helper-compilation-targets@^7.27.2":
+  version "7.27.2"
+  resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz#46a0f6efab808d51d29ce96858dd10ce8732733d"
+  integrity sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==
+  dependencies:
+    "@babel/compat-data" "^7.27.2"
+    "@babel/helper-validator-option" "^7.27.1"
+    browserslist "^4.24.0"
+    lru-cache "^5.1.1"
+    semver "^6.3.1"
+
+"@babel/helper-create-class-features-plugin@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.1.tgz#5bee4262a6ea5ddc852d0806199eb17ca3de9281"
+  integrity sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.27.1"
+    "@babel/helper-member-expression-to-functions" "^7.27.1"
+    "@babel/helper-optimise-call-expression" "^7.27.1"
+    "@babel/helper-replace-supers" "^7.27.1"
+    "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1"
+    "@babel/traverse" "^7.27.1"
+    semver "^6.3.1"
+
+"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.1.tgz#05b0882d97ba1d4d03519e4bce615d70afa18c53"
+  integrity sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.27.1"
+    regexpu-core "^6.2.0"
+    semver "^6.3.1"
+
+"@babel/helper-define-polyfill-provider@^0.6.3", "@babel/helper-define-polyfill-provider@^0.6.4":
+  version "0.6.4"
+  resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.4.tgz#15e8746368bfa671785f5926ff74b3064c291fab"
+  integrity sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==
+  dependencies:
+    "@babel/helper-compilation-targets" "^7.22.6"
+    "@babel/helper-plugin-utils" "^7.22.5"
+    debug "^4.1.1"
+    lodash.debounce "^4.0.8"
+    resolve "^1.14.2"
+
+"@babel/helper-member-expression-to-functions@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz#ea1211276be93e798ce19037da6f06fbb994fa44"
+  integrity sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==
+  dependencies:
+    "@babel/traverse" "^7.27.1"
+    "@babel/types" "^7.27.1"
+
+"@babel/helper-module-imports@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz#7ef769a323e2655e126673bb6d2d6913bbead204"
+  integrity sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==
+  dependencies:
+    "@babel/traverse" "^7.27.1"
+    "@babel/types" "^7.27.1"
+
+"@babel/helper-module-transforms@^7.27.1", "@babel/helper-module-transforms@^7.27.3":
+  version "7.27.3"
+  resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz#db0bbcfba5802f9ef7870705a7ef8788508ede02"
+  integrity sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==
+  dependencies:
+    "@babel/helper-module-imports" "^7.27.1"
+    "@babel/helper-validator-identifier" "^7.27.1"
+    "@babel/traverse" "^7.27.3"
+
+"@babel/helper-optimise-call-expression@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz#c65221b61a643f3e62705e5dd2b5f115e35f9200"
+  integrity sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==
+  dependencies:
+    "@babel/types" "^7.27.1"
+
+"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.27.1", "@babel/helper-plugin-utils@^7.8.0":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz#ddb2f876534ff8013e6c2b299bf4d39b3c51d44c"
+  integrity sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==
+
+"@babel/helper-remap-async-to-generator@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz#4601d5c7ce2eb2aea58328d43725523fcd362ce6"
+  integrity sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.27.1"
+    "@babel/helper-wrap-function" "^7.27.1"
+    "@babel/traverse" "^7.27.1"
+
+"@babel/helper-replace-supers@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz#b1ed2d634ce3bdb730e4b52de30f8cccfd692bc0"
+  integrity sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==
+  dependencies:
+    "@babel/helper-member-expression-to-functions" "^7.27.1"
+    "@babel/helper-optimise-call-expression" "^7.27.1"
+    "@babel/traverse" "^7.27.1"
+
+"@babel/helper-skip-transparent-expression-wrappers@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz#62bb91b3abba8c7f1fec0252d9dbea11b3ee7a56"
+  integrity sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==
+  dependencies:
+    "@babel/traverse" "^7.27.1"
+    "@babel/types" "^7.27.1"
+
+"@babel/helper-string-parser@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687"
+  integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==
+
+"@babel/helper-validator-identifier@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz#a7054dcc145a967dd4dc8fee845a57c1316c9df8"
+  integrity sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==
+
+"@babel/helper-validator-option@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz#fa52f5b1e7db1ab049445b421c4471303897702f"
+  integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==
+
+"@babel/helper-wrap-function@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.27.1.tgz#b88285009c31427af318d4fe37651cd62a142409"
+  integrity sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ==
+  dependencies:
+    "@babel/template" "^7.27.1"
+    "@babel/traverse" "^7.27.1"
+    "@babel/types" "^7.27.1"
+
+"@babel/helpers@^7.27.4":
+  version "7.27.6"
+  resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.27.6.tgz#6456fed15b2cb669d2d1fabe84b66b34991d812c"
+  integrity sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==
+  dependencies:
+    "@babel/template" "^7.27.2"
+    "@babel/types" "^7.27.6"
+
+"@babel/parser@^7.27.2", "@babel/parser@^7.27.4", "@babel/parser@^7.27.5":
+  version "7.27.5"
+  resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.27.5.tgz#ed22f871f110aa285a6fd934a0efed621d118826"
+  integrity sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==
+  dependencies:
+    "@babel/types" "^7.27.3"
+
+"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.27.1.tgz#61dd8a8e61f7eb568268d1b5f129da3eee364bf9"
+  integrity sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.27.1"
+    "@babel/traverse" "^7.27.1"
+
+"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz#43f70a6d7efd52370eefbdf55ae03d91b293856d"
+  integrity sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz#beb623bd573b8b6f3047bd04c32506adc3e58a72"
+  integrity sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz#e134a5479eb2ba9c02714e8c1ebf1ec9076124fd"
+  integrity sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.27.1"
+    "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1"
+    "@babel/plugin-transform-optional-chaining" "^7.27.1"
+
+"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.27.1.tgz#bb1c25af34d75115ce229a1de7fa44bf8f955670"
+  integrity sha512-6BpaYGDavZqkI6yT+KSPdpZFfpnd68UKXbcjI9pJ13pvHhPrCKWOOLp+ysvMeA+DxnhuPpgIaRpxRxo5A9t5jw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.27.1"
+    "@babel/traverse" "^7.27.1"
+
+"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2":
+  version "7.21.0-placeholder-for-preset-env.2"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703"
+  integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==
+
+"@babel/plugin-syntax-dynamic-import@^7.8.3":
+  version "7.8.3"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3"
+  integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-import-assertions@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz#88894aefd2b03b5ee6ad1562a7c8e1587496aecd"
+  integrity sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-syntax-import-attributes@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz#34c017d54496f9b11b61474e7ea3dfd5563ffe07"
+  integrity sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-syntax-jsx@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz#2f9beb5eff30fa507c5532d107daac7b888fa34c"
+  integrity sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-syntax-typescript@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz#5147d29066a793450f220c63fa3a9431b7e6dd18"
+  integrity sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-syntax-unicode-sets-regex@^7.18.6":
+  version "7.18.6"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357"
+  integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==
+  dependencies:
+    "@babel/helper-create-regexp-features-plugin" "^7.18.6"
+    "@babel/helper-plugin-utils" "^7.18.6"
+
+"@babel/plugin-transform-arrow-functions@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz#6e2061067ba3ab0266d834a9f94811196f2aba9a"
+  integrity sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-transform-async-generator-functions@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.27.1.tgz#ca433df983d68e1375398e7ca71bf2a4f6fd89d7"
+  integrity sha512-eST9RrwlpaoJBDHShc+DS2SG4ATTi2MYNb4OxYkf3n+7eb49LWpnS+HSpVfW4x927qQwgk8A2hGNVaajAEw0EA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.27.1"
+    "@babel/helper-remap-async-to-generator" "^7.27.1"
+    "@babel/traverse" "^7.27.1"
+
+"@babel/plugin-transform-async-to-generator@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz#9a93893b9379b39466c74474f55af03de78c66e7"
+  integrity sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==
+  dependencies:
+    "@babel/helper-module-imports" "^7.27.1"
+    "@babel/helper-plugin-utils" "^7.27.1"
+    "@babel/helper-remap-async-to-generator" "^7.27.1"
+
+"@babel/plugin-transform-block-scoped-functions@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz#558a9d6e24cf72802dd3b62a4b51e0d62c0f57f9"
+  integrity sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-transform-block-scoping@^7.27.1":
+  version "7.27.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.27.5.tgz#98c37485d815533623d992fd149af3e7b3140157"
+  integrity sha512-JF6uE2s67f0y2RZcm2kpAUEbD50vH62TyWVebxwHAlbSdM49VqPz8t4a1uIjp4NIOIZ4xzLfjY5emt/RCyC7TQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-transform-class-properties@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz#dd40a6a370dfd49d32362ae206ddaf2bb082a925"
+  integrity sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==
+  dependencies:
+    "@babel/helper-create-class-features-plugin" "^7.27.1"
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-transform-class-static-block@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.27.1.tgz#7e920d5625b25bbccd3061aefbcc05805ed56ce4"
+  integrity sha512-s734HmYU78MVzZ++joYM+NkJusItbdRcbm+AGRgJCt3iA+yux0QpD9cBVdz3tKyrjVYWRl7j0mHSmv4lhV0aoA==
+  dependencies:
+    "@babel/helper-create-class-features-plugin" "^7.27.1"
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-transform-classes@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.27.1.tgz#03bb04bea2c7b2f711f0db7304a8da46a85cced4"
+  integrity sha512-7iLhfFAubmpeJe/Wo2TVuDrykh/zlWXLzPNdL0Jqn/Xu8R3QQ8h9ff8FQoISZOsw74/HFqFI7NX63HN7QFIHKA==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.27.1"
+    "@babel/helper-compilation-targets" "^7.27.1"
+    "@babel/helper-plugin-utils" "^7.27.1"
+    "@babel/helper-replace-supers" "^7.27.1"
+    "@babel/traverse" "^7.27.1"
+    globals "^11.1.0"
+
+"@babel/plugin-transform-computed-properties@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz#81662e78bf5e734a97982c2b7f0a793288ef3caa"
+  integrity sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.27.1"
+    "@babel/template" "^7.27.1"
+
+"@babel/plugin-transform-destructuring@^7.27.1", "@babel/plugin-transform-destructuring@^7.27.3":
+  version "7.27.3"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.27.3.tgz#3cc8299ed798d9a909f8d66ddeb40849ec32e3b0"
+  integrity sha512-s4Jrok82JpiaIprtY2nHsYmrThKvvwgHwjgd7UMiYhZaN0asdXNLr0y+NjTfkA7SyQE5i2Fb7eawUOZmLvyqOA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-transform-dotall-regex@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz#aa6821de864c528b1fecf286f0a174e38e826f4d"
+  integrity sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==
+  dependencies:
+    "@babel/helper-create-regexp-features-plugin" "^7.27.1"
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-transform-duplicate-keys@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz#f1fbf628ece18e12e7b32b175940e68358f546d1"
+  integrity sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz#5043854ca620a94149372e69030ff8cb6a9eb0ec"
+  integrity sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==
+  dependencies:
+    "@babel/helper-create-regexp-features-plugin" "^7.27.1"
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-transform-dynamic-import@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz#4c78f35552ac0e06aa1f6e3c573d67695e8af5a4"
+  integrity sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-transform-exponentiation-operator@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.27.1.tgz#fc497b12d8277e559747f5a3ed868dd8064f83e1"
+  integrity sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-transform-export-namespace-from@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz#71ca69d3471edd6daa711cf4dfc3400415df9c23"
+  integrity sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-transform-for-of@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz#bc24f7080e9ff721b63a70ac7b2564ca15b6c40a"
+  integrity sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.27.1"
+    "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1"
+
+"@babel/plugin-transform-function-name@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz#4d0bf307720e4dce6d7c30fcb1fd6ca77bdeb3a7"
+  integrity sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==
+  dependencies:
+    "@babel/helper-compilation-targets" "^7.27.1"
+    "@babel/helper-plugin-utils" "^7.27.1"
+    "@babel/traverse" "^7.27.1"
+
+"@babel/plugin-transform-json-strings@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz#a2e0ce6ef256376bd527f290da023983527a4f4c"
+  integrity sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-transform-literals@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz#baaefa4d10a1d4206f9dcdda50d7d5827bb70b24"
+  integrity sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-transform-logical-assignment-operators@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.27.1.tgz#890cb20e0270e0e5bebe3f025b434841c32d5baa"
+  integrity sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-transform-member-expression-literals@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz#37b88ba594d852418e99536f5612f795f23aeaf9"
+  integrity sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-transform-modules-amd@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz#a4145f9d87c2291fe2d05f994b65dba4e3e7196f"
+  integrity sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==
+  dependencies:
+    "@babel/helper-module-transforms" "^7.27.1"
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-transform-modules-commonjs@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz#8e44ed37c2787ecc23bdc367f49977476614e832"
+  integrity sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==
+  dependencies:
+    "@babel/helper-module-transforms" "^7.27.1"
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-transform-modules-systemjs@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.27.1.tgz#00e05b61863070d0f3292a00126c16c0e024c4ed"
+  integrity sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==
+  dependencies:
+    "@babel/helper-module-transforms" "^7.27.1"
+    "@babel/helper-plugin-utils" "^7.27.1"
+    "@babel/helper-validator-identifier" "^7.27.1"
+    "@babel/traverse" "^7.27.1"
+
+"@babel/plugin-transform-modules-umd@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz#63f2cf4f6dc15debc12f694e44714863d34cd334"
+  integrity sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==
+  dependencies:
+    "@babel/helper-module-transforms" "^7.27.1"
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-transform-named-capturing-groups-regex@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz#f32b8f7818d8fc0cc46ee20a8ef75f071af976e1"
+  integrity sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==
+  dependencies:
+    "@babel/helper-create-regexp-features-plugin" "^7.27.1"
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-transform-new-target@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz#259c43939728cad1706ac17351b7e6a7bea1abeb"
+  integrity sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-transform-nullish-coalescing-operator@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz#4f9d3153bf6782d73dd42785a9d22d03197bc91d"
+  integrity sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-transform-numeric-separator@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz#614e0b15cc800e5997dadd9bd6ea524ed6c819c6"
+  integrity sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-transform-object-rest-spread@^7.27.2":
+  version "7.27.3"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.27.3.tgz#ce130aa73fef828bc3e3e835f9bc6144be3eb1c0"
+  integrity sha512-7ZZtznF9g4l2JCImCo5LNKFHB5eXnN39lLtLY5Tg+VkR0jwOt7TBciMckuiQIOIW7L5tkQOCh3bVGYeXgMx52Q==
+  dependencies:
+    "@babel/helper-compilation-targets" "^7.27.2"
+    "@babel/helper-plugin-utils" "^7.27.1"
+    "@babel/plugin-transform-destructuring" "^7.27.3"
+    "@babel/plugin-transform-parameters" "^7.27.1"
+
+"@babel/plugin-transform-object-super@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz#1c932cd27bf3874c43a5cac4f43ebf970c9871b5"
+  integrity sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.27.1"
+    "@babel/helper-replace-supers" "^7.27.1"
+
+"@babel/plugin-transform-optional-catch-binding@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz#84c7341ebde35ccd36b137e9e45866825072a30c"
+  integrity sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-transform-optional-chaining@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.27.1.tgz#874ce3c4f06b7780592e946026eb76a32830454f"
+  integrity sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.27.1"
+    "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1"
+
+"@babel/plugin-transform-parameters@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.1.tgz#80334b54b9b1ac5244155a0c8304a187a618d5a7"
+  integrity sha512-018KRk76HWKeZ5l4oTj2zPpSh+NbGdt0st5S6x0pga6HgrjBOJb24mMDHorFopOOd6YHkLgOZ+zaCjZGPO4aKg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-transform-private-methods@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz#fdacbab1c5ed81ec70dfdbb8b213d65da148b6af"
+  integrity sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==
+  dependencies:
+    "@babel/helper-create-class-features-plugin" "^7.27.1"
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-transform-private-property-in-object@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz#4dbbef283b5b2f01a21e81e299f76e35f900fb11"
+  integrity sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.27.1"
+    "@babel/helper-create-class-features-plugin" "^7.27.1"
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-transform-property-literals@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz#07eafd618800591e88073a0af1b940d9a42c6424"
+  integrity sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-transform-react-constant-elements@^7.21.3":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.27.1.tgz#6c6b50424e749a6e48afd14cf7b92f98cb9383f9"
+  integrity sha512-edoidOjl/ZxvYo4lSBOQGDSyToYVkTAwyVoa2tkuYTSmjrB1+uAedoL5iROVLXkxH+vRgA7uP4tMg2pUJpZ3Ug==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-transform-react-display-name@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.27.1.tgz#43af31362d71f7848cfac0cbc212882b1a16e80f"
+  integrity sha512-p9+Vl3yuHPmkirRrg021XiP+EETmPMQTLr6Ayjj85RLNEbb3Eya/4VI0vAdzQG9SEAl2Lnt7fy5lZyMzjYoZQQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-transform-react-jsx-development@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.27.1.tgz#47ff95940e20a3a70e68ad3d4fcb657b647f6c98"
+  integrity sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==
+  dependencies:
+    "@babel/plugin-transform-react-jsx" "^7.27.1"
+
+"@babel/plugin-transform-react-jsx@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.27.1.tgz#1023bc94b78b0a2d68c82b5e96aed573bcfb9db0"
+  integrity sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.27.1"
+    "@babel/helper-module-imports" "^7.27.1"
+    "@babel/helper-plugin-utils" "^7.27.1"
+    "@babel/plugin-syntax-jsx" "^7.27.1"
+    "@babel/types" "^7.27.1"
+
+"@babel/plugin-transform-react-pure-annotations@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.27.1.tgz#339f1ce355eae242e0649f232b1c68907c02e879"
+  integrity sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.27.1"
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-transform-regenerator@^7.27.1":
+  version "7.27.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.27.5.tgz#0c01f4e0e4cced15f68ee14b9c76dac9813850c7"
+  integrity sha512-uhB8yHerfe3MWnuLAhEbeQ4afVoqv8BQsPqrTv7e/jZ9y00kJL6l9a/f4OWaKxotmjzewfEyXE1vgDJenkQ2/Q==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-transform-regexp-modifiers@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz#df9ba5577c974e3f1449888b70b76169998a6d09"
+  integrity sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==
+  dependencies:
+    "@babel/helper-create-regexp-features-plugin" "^7.27.1"
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-transform-reserved-words@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz#40fba4878ccbd1c56605a4479a3a891ac0274bb4"
+  integrity sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-transform-runtime@^7.25.9":
+  version "7.27.4"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.27.4.tgz#dee5c5db6543313d1ae1b4b1ec122ff1e77352b9"
+  integrity sha512-D68nR5zxU64EUzV8i7T3R5XP0Xhrou/amNnddsRQssx6GrTLdZl1rLxyjtVZBd+v/NVX4AbTPOB5aU8thAZV1A==
+  dependencies:
+    "@babel/helper-module-imports" "^7.27.1"
+    "@babel/helper-plugin-utils" "^7.27.1"
+    babel-plugin-polyfill-corejs2 "^0.4.10"
+    babel-plugin-polyfill-corejs3 "^0.11.0"
+    babel-plugin-polyfill-regenerator "^0.6.1"
+    semver "^6.3.1"
+
+"@babel/plugin-transform-shorthand-properties@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz#532abdacdec87bfee1e0ef8e2fcdee543fe32b90"
+  integrity sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-transform-spread@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz#1a264d5fc12750918f50e3fe3e24e437178abb08"
+  integrity sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.27.1"
+    "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1"
+
+"@babel/plugin-transform-sticky-regex@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz#18984935d9d2296843a491d78a014939f7dcd280"
+  integrity sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-transform-template-literals@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz#1a0eb35d8bb3e6efc06c9fd40eb0bcef548328b8"
+  integrity sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-transform-typeof-symbol@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz#70e966bb492e03509cf37eafa6dcc3051f844369"
+  integrity sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-transform-typescript@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.27.1.tgz#d3bb65598bece03f773111e88cc4e8e5070f1140"
+  integrity sha512-Q5sT5+O4QUebHdbwKedFBEwRLb02zJ7r4A5Gg2hUoLuU3FjdMcyqcywqUrLCaDsFCxzokf7u9kuy7qz51YUuAg==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.27.1"
+    "@babel/helper-create-class-features-plugin" "^7.27.1"
+    "@babel/helper-plugin-utils" "^7.27.1"
+    "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1"
+    "@babel/plugin-syntax-typescript" "^7.27.1"
+
+"@babel/plugin-transform-unicode-escapes@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz#3e3143f8438aef842de28816ece58780190cf806"
+  integrity sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-transform-unicode-property-regex@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz#bdfe2d3170c78c5691a3c3be934c8c0087525956"
+  integrity sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==
+  dependencies:
+    "@babel/helper-create-regexp-features-plugin" "^7.27.1"
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-transform-unicode-regex@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz#25948f5c395db15f609028e370667ed8bae9af97"
+  integrity sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==
+  dependencies:
+    "@babel/helper-create-regexp-features-plugin" "^7.27.1"
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-transform-unicode-sets-regex@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz#6ab706d10f801b5c72da8bb2548561fa04193cd1"
+  integrity sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==
+  dependencies:
+    "@babel/helper-create-regexp-features-plugin" "^7.27.1"
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/preset-env@^7.20.2", "@babel/preset-env@^7.25.9":
+  version "7.27.2"
+  resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.27.2.tgz#106e6bfad92b591b1f6f76fd4cf13b7725a7bf9a"
+  integrity sha512-Ma4zSuYSlGNRlCLO+EAzLnCmJK2vdstgv+n7aUP+/IKZrOfWHOJVdSJtuub8RzHTj3ahD37k5OKJWvzf16TQyQ==
+  dependencies:
+    "@babel/compat-data" "^7.27.2"
+    "@babel/helper-compilation-targets" "^7.27.2"
+    "@babel/helper-plugin-utils" "^7.27.1"
+    "@babel/helper-validator-option" "^7.27.1"
+    "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.27.1"
+    "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.27.1"
+    "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.27.1"
+    "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.27.1"
+    "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.27.1"
+    "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2"
+    "@babel/plugin-syntax-import-assertions" "^7.27.1"
+    "@babel/plugin-syntax-import-attributes" "^7.27.1"
+    "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6"
+    "@babel/plugin-transform-arrow-functions" "^7.27.1"
+    "@babel/plugin-transform-async-generator-functions" "^7.27.1"
+    "@babel/plugin-transform-async-to-generator" "^7.27.1"
+    "@babel/plugin-transform-block-scoped-functions" "^7.27.1"
+    "@babel/plugin-transform-block-scoping" "^7.27.1"
+    "@babel/plugin-transform-class-properties" "^7.27.1"
+    "@babel/plugin-transform-class-static-block" "^7.27.1"
+    "@babel/plugin-transform-classes" "^7.27.1"
+    "@babel/plugin-transform-computed-properties" "^7.27.1"
+    "@babel/plugin-transform-destructuring" "^7.27.1"
+    "@babel/plugin-transform-dotall-regex" "^7.27.1"
+    "@babel/plugin-transform-duplicate-keys" "^7.27.1"
+    "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.27.1"
+    "@babel/plugin-transform-dynamic-import" "^7.27.1"
+    "@babel/plugin-transform-exponentiation-operator" "^7.27.1"
+    "@babel/plugin-transform-export-namespace-from" "^7.27.1"
+    "@babel/plugin-transform-for-of" "^7.27.1"
+    "@babel/plugin-transform-function-name" "^7.27.1"
+    "@babel/plugin-transform-json-strings" "^7.27.1"
+    "@babel/plugin-transform-literals" "^7.27.1"
+    "@babel/plugin-transform-logical-assignment-operators" "^7.27.1"
+    "@babel/plugin-transform-member-expression-literals" "^7.27.1"
+    "@babel/plugin-transform-modules-amd" "^7.27.1"
+    "@babel/plugin-transform-modules-commonjs" "^7.27.1"
+    "@babel/plugin-transform-modules-systemjs" "^7.27.1"
+    "@babel/plugin-transform-modules-umd" "^7.27.1"
+    "@babel/plugin-transform-named-capturing-groups-regex" "^7.27.1"
+    "@babel/plugin-transform-new-target" "^7.27.1"
+    "@babel/plugin-transform-nullish-coalescing-operator" "^7.27.1"
+    "@babel/plugin-transform-numeric-separator" "^7.27.1"
+    "@babel/plugin-transform-object-rest-spread" "^7.27.2"
+    "@babel/plugin-transform-object-super" "^7.27.1"
+    "@babel/plugin-transform-optional-catch-binding" "^7.27.1"
+    "@babel/plugin-transform-optional-chaining" "^7.27.1"
+    "@babel/plugin-transform-parameters" "^7.27.1"
+    "@babel/plugin-transform-private-methods" "^7.27.1"
+    "@babel/plugin-transform-private-property-in-object" "^7.27.1"
+    "@babel/plugin-transform-property-literals" "^7.27.1"
+    "@babel/plugin-transform-regenerator" "^7.27.1"
+    "@babel/plugin-transform-regexp-modifiers" "^7.27.1"
+    "@babel/plugin-transform-reserved-words" "^7.27.1"
+    "@babel/plugin-transform-shorthand-properties" "^7.27.1"
+    "@babel/plugin-transform-spread" "^7.27.1"
+    "@babel/plugin-transform-sticky-regex" "^7.27.1"
+    "@babel/plugin-transform-template-literals" "^7.27.1"
+    "@babel/plugin-transform-typeof-symbol" "^7.27.1"
+    "@babel/plugin-transform-unicode-escapes" "^7.27.1"
+    "@babel/plugin-transform-unicode-property-regex" "^7.27.1"
+    "@babel/plugin-transform-unicode-regex" "^7.27.1"
+    "@babel/plugin-transform-unicode-sets-regex" "^7.27.1"
+    "@babel/preset-modules" "0.1.6-no-external-plugins"
+    babel-plugin-polyfill-corejs2 "^0.4.10"
+    babel-plugin-polyfill-corejs3 "^0.11.0"
+    babel-plugin-polyfill-regenerator "^0.6.1"
+    core-js-compat "^3.40.0"
+    semver "^6.3.1"
+
+"@babel/preset-modules@0.1.6-no-external-plugins":
+  version "0.1.6-no-external-plugins"
+  resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a"
+  integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+    "@babel/types" "^7.4.4"
+    esutils "^2.0.2"
+
+"@babel/preset-react@^7.18.6", "@babel/preset-react@^7.25.9":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.27.1.tgz#86ea0a5ca3984663f744be2fd26cb6747c3fd0ec"
+  integrity sha512-oJHWh2gLhU9dW9HHr42q0cI0/iHHXTLGe39qvpAZZzagHy0MzYLCnCVV0symeRvzmjHyVU7mw2K06E6u/JwbhA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.27.1"
+    "@babel/helper-validator-option" "^7.27.1"
+    "@babel/plugin-transform-react-display-name" "^7.27.1"
+    "@babel/plugin-transform-react-jsx" "^7.27.1"
+    "@babel/plugin-transform-react-jsx-development" "^7.27.1"
+    "@babel/plugin-transform-react-pure-annotations" "^7.27.1"
+
+"@babel/preset-typescript@^7.21.0", "@babel/preset-typescript@^7.25.9":
+  version "7.27.1"
+  resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.27.1.tgz#190742a6428d282306648a55b0529b561484f912"
+  integrity sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.27.1"
+    "@babel/helper-validator-option" "^7.27.1"
+    "@babel/plugin-syntax-jsx" "^7.27.1"
+    "@babel/plugin-transform-modules-commonjs" "^7.27.1"
+    "@babel/plugin-transform-typescript" "^7.27.1"
+
+"@babel/runtime-corejs3@^7.25.9":
+  version "7.27.6"
+  resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.27.6.tgz#97644153808a62898e7c05f3361501417db3c48b"
+  integrity sha512-vDVrlmRAY8z9Ul/HxT+8ceAru95LQgkSKiXkSYZvqtbkPSfhZJgpRp45Cldbh1GJ1kxzQkI70AqyrTI58KpaWQ==
+  dependencies:
+    core-js-pure "^3.30.2"
+
+"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.25.9":
+  version "7.27.6"
+  resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.27.6.tgz#ec4070a04d76bae8ddbb10770ba55714a417b7c6"
+  integrity sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==
+
+"@babel/template@^7.27.1", "@babel/template@^7.27.2":
+  version "7.27.2"
+  resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.2.tgz#fa78ceed3c4e7b63ebf6cb39e5852fca45f6809d"
+  integrity sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==
+  dependencies:
+    "@babel/code-frame" "^7.27.1"
+    "@babel/parser" "^7.27.2"
+    "@babel/types" "^7.27.1"
+
+"@babel/traverse@^7.25.9", "@babel/traverse@^7.27.1", "@babel/traverse@^7.27.3", "@babel/traverse@^7.27.4":
+  version "7.27.4"
+  resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.27.4.tgz#b0045ac7023c8472c3d35effd7cc9ebd638da6ea"
+  integrity sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==
+  dependencies:
+    "@babel/code-frame" "^7.27.1"
+    "@babel/generator" "^7.27.3"
+    "@babel/parser" "^7.27.4"
+    "@babel/template" "^7.27.2"
+    "@babel/types" "^7.27.3"
+    debug "^4.3.1"
+    globals "^11.1.0"
+
+"@babel/types@^7.21.3", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.27.6", "@babel/types@^7.4.4":
+  version "7.27.6"
+  resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.27.6.tgz#a434ca7add514d4e646c80f7375c0aa2befc5535"
+  integrity sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==
+  dependencies:
+    "@babel/helper-string-parser" "^7.27.1"
+    "@babel/helper-validator-identifier" "^7.27.1"
+
+"@braintree/sanitize-url@^7.0.4":
+  version "7.1.1"
+  resolved "https://registry.yarnpkg.com/@braintree/sanitize-url/-/sanitize-url-7.1.1.tgz#15e19737d946559289b915e5dad3b4c28407735e"
+  integrity sha512-i1L7noDNxtFyL5DmZafWy1wRVhGehQmzZaz1HiN5e7iylJMSZR7ekOV7NsIqa5qBldlLrsKv4HbgFUVlQrz8Mw==
+
+"@chevrotain/cst-dts-gen@11.0.3":
+  version "11.0.3"
+  resolved "https://registry.yarnpkg.com/@chevrotain/cst-dts-gen/-/cst-dts-gen-11.0.3.tgz#5e0863cc57dc45e204ccfee6303225d15d9d4783"
+  integrity sha512-BvIKpRLeS/8UbfxXxgC33xOumsacaeCKAjAeLyOn7Pcp95HiRbrpl14S+9vaZLolnbssPIUuiUd8IvgkRyt6NQ==
+  dependencies:
+    "@chevrotain/gast" "11.0.3"
+    "@chevrotain/types" "11.0.3"
+    lodash-es "4.17.21"
+
+"@chevrotain/gast@11.0.3":
+  version "11.0.3"
+  resolved "https://registry.yarnpkg.com/@chevrotain/gast/-/gast-11.0.3.tgz#e84d8880323fe8cbe792ef69ce3ffd43a936e818"
+  integrity sha512-+qNfcoNk70PyS/uxmj3li5NiECO+2YKZZQMbmjTqRI3Qchu8Hig/Q9vgkHpI3alNjr7M+a2St5pw5w5F6NL5/Q==
+  dependencies:
+    "@chevrotain/types" "11.0.3"
+    lodash-es "4.17.21"
+
+"@chevrotain/regexp-to-ast@11.0.3":
+  version "11.0.3"
+  resolved "https://registry.yarnpkg.com/@chevrotain/regexp-to-ast/-/regexp-to-ast-11.0.3.tgz#11429a81c74a8e6a829271ce02fc66166d56dcdb"
+  integrity sha512-1fMHaBZxLFvWI067AVbGJav1eRY7N8DDvYCTwGBiE/ytKBgP8azTdgyrKyWZ9Mfh09eHWb5PgTSO8wi7U824RA==
+
+"@chevrotain/types@11.0.3":
+  version "11.0.3"
+  resolved "https://registry.yarnpkg.com/@chevrotain/types/-/types-11.0.3.tgz#f8a03914f7b937f594f56eb89312b3b8f1c91848"
+  integrity sha512-gsiM3G8b58kZC2HaWR50gu6Y1440cHiJ+i3JUvcp/35JchYejb2+5MVeJK0iKThYpAa/P2PYFV4hoi44HD+aHQ==
+
+"@chevrotain/utils@11.0.3":
+  version "11.0.3"
+  resolved "https://registry.yarnpkg.com/@chevrotain/utils/-/utils-11.0.3.tgz#e39999307b102cff3645ec4f5b3665f5297a2224"
+  integrity sha512-YslZMgtJUyuMbZ+aKvfF3x1f5liK4mWNxghFRv7jqRR9C3R3fAOGTTKvxXDa2Y1s9zSbcpuO0cAxDYsc9SrXoQ==
+
+"@colors/colors@1.5.0":
+  version "1.5.0"
+  resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9"
+  integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==
+
+"@cspotcode/source-map-support@^0.8.0":
+  version "0.8.1"
+  resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1"
+  integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==
+  dependencies:
+    "@jridgewell/trace-mapping" "0.3.9"
+
+"@csstools/cascade-layer-name-parser@^2.0.5":
+  version "2.0.5"
+  resolved "https://registry.yarnpkg.com/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-2.0.5.tgz#43f962bebead0052a9fed1a2deeb11f85efcbc72"
+  integrity sha512-p1ko5eHgV+MgXFVa4STPKpvPxr6ReS8oS2jzTukjR74i5zJNyWO1ZM1m8YKBXnzDKWfBN1ztLYlHxbVemDD88A==
+
+"@csstools/color-helpers@^5.0.2":
+  version "5.0.2"
+  resolved "https://registry.yarnpkg.com/@csstools/color-helpers/-/color-helpers-5.0.2.tgz#82592c9a7c2b83c293d9161894e2a6471feb97b8"
+  integrity sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==
+
+"@csstools/css-calc@^2.1.4":
+  version "2.1.4"
+  resolved "https://registry.yarnpkg.com/@csstools/css-calc/-/css-calc-2.1.4.tgz#8473f63e2fcd6e459838dd412401d5948f224c65"
+  integrity sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==
+
+"@csstools/css-color-parser@^3.0.10":
+  version "3.0.10"
+  resolved "https://registry.yarnpkg.com/@csstools/css-color-parser/-/css-color-parser-3.0.10.tgz#79fc68864dd43c3b6782d2b3828bc0fa9d085c10"
+  integrity sha512-TiJ5Ajr6WRd1r8HSiwJvZBiJOqtH86aHpUjq5aEKWHiII2Qfjqd/HCWKPOW8EP4vcspXbHnXrwIDlu5savQipg==
+  dependencies:
+    "@csstools/color-helpers" "^5.0.2"
+    "@csstools/css-calc" "^2.1.4"
+
+"@csstools/css-parser-algorithms@^3.0.5":
+  version "3.0.5"
+  resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz#5755370a9a29abaec5515b43c8b3f2cf9c2e3076"
+  integrity sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==
+
+"@csstools/css-tokenizer@^3.0.4":
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz#333fedabc3fd1a8e5d0100013731cf19e6a8c5d3"
+  integrity sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==
+
+"@csstools/media-query-list-parser@^4.0.3":
+  version "4.0.3"
+  resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.3.tgz#7aec77bcb89c2da80ef207e73f474ef9e1b3cdf1"
+  integrity sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ==
+
+"@csstools/postcss-cascade-layers@^5.0.1":
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-5.0.1.tgz#9640313e64b5e39133de7e38a5aa7f40dc259597"
+  integrity sha512-XOfhI7GShVcKiKwmPAnWSqd2tBR0uxt+runAxttbSp/LY2U16yAVPmAf7e9q4JJ0d+xMNmpwNDLBXnmRCl3HMQ==
+  dependencies:
+    "@csstools/selector-specificity" "^5.0.0"
+    postcss-selector-parser "^7.0.0"
+
+"@csstools/postcss-color-function@^4.0.10":
+  version "4.0.10"
+  resolved "https://registry.yarnpkg.com/@csstools/postcss-color-function/-/postcss-color-function-4.0.10.tgz#11ad43a66ef2cc794ab826a07df8b5fa9fb47a3a"
+  integrity sha512-4dY0NBu7NVIpzxZRgh/Q/0GPSz/jLSw0i/u3LTUor0BkQcz/fNhN10mSWBDsL0p9nDb0Ky1PD6/dcGbhACuFTQ==
+  dependencies:
+    "@csstools/css-color-parser" "^3.0.10"
+    "@csstools/css-parser-algorithms" "^3.0.5"
+    "@csstools/css-tokenizer" "^3.0.4"
+    "@csstools/postcss-progressive-custom-properties" "^4.1.0"
+    "@csstools/utilities" "^2.0.0"
+
+"@csstools/postcss-color-mix-function@^3.0.10":
+  version "3.0.10"
+  resolved "https://registry.yarnpkg.com/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-3.0.10.tgz#8c9d0ccfae5c45a9870dd84807ea2995c7a3a514"
+  integrity sha512-P0lIbQW9I4ShE7uBgZRib/lMTf9XMjJkFl/d6w4EMNHu2qvQ6zljJGEcBkw/NsBtq/6q3WrmgxSS8kHtPMkK4Q==
+  dependencies:
+    "@csstools/css-color-parser" "^3.0.10"
+    "@csstools/css-parser-algorithms" "^3.0.5"
+    "@csstools/css-tokenizer" "^3.0.4"
+    "@csstools/postcss-progressive-custom-properties" "^4.1.0"
+    "@csstools/utilities" "^2.0.0"
+
+"@csstools/postcss-color-mix-variadic-function-arguments@^1.0.0":
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/@csstools/postcss-color-mix-variadic-function-arguments/-/postcss-color-mix-variadic-function-arguments-1.0.0.tgz#0b29cb9b4630d7ed68549db265662d41554a17ed"
+  integrity sha512-Z5WhouTyD74dPFPrVE7KydgNS9VvnjB8qcdes9ARpCOItb4jTnm7cHp4FhxCRUoyhabD0WVv43wbkJ4p8hLAlQ==
+  dependencies:
+    "@csstools/css-color-parser" "^3.0.10"
+    "@csstools/css-parser-algorithms" "^3.0.5"
+    "@csstools/css-tokenizer" "^3.0.4"
+    "@csstools/postcss-progressive-custom-properties" "^4.1.0"
+    "@csstools/utilities" "^2.0.0"
+
+"@csstools/postcss-content-alt-text@^2.0.6":
+  version "2.0.6"
+  resolved "https://registry.yarnpkg.com/@csstools/postcss-content-alt-text/-/postcss-content-alt-text-2.0.6.tgz#548862226eac54bab0ee5f1bf3a9981393ab204b"
+  integrity sha512-eRjLbOjblXq+byyaedQRSrAejKGNAFued+LcbzT+LCL78fabxHkxYjBbxkroONxHHYu2qxhFK2dBStTLPG3jpQ==
+  dependencies:
+    "@csstools/css-parser-algorithms" "^3.0.5"
+    "@csstools/css-tokenizer" "^3.0.4"
+    "@csstools/postcss-progressive-custom-properties" "^4.1.0"
+    "@csstools/utilities" "^2.0.0"
+
+"@csstools/postcss-exponential-functions@^2.0.9":
+  version "2.0.9"
+  resolved "https://registry.yarnpkg.com/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-2.0.9.tgz#fc03d1272888cb77e64cc1a7d8a33016e4f05c69"
+  integrity sha512-abg2W/PI3HXwS/CZshSa79kNWNZHdJPMBXeZNyPQFbbj8sKO3jXxOt/wF7juJVjyDTc6JrvaUZYFcSBZBhaxjw==
+  dependencies:
+    "@csstools/css-calc" "^2.1.4"
+    "@csstools/css-parser-algorithms" "^3.0.5"
+    "@csstools/css-tokenizer" "^3.0.4"
+
+"@csstools/postcss-font-format-keywords@^4.0.0":
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-4.0.0.tgz#6730836eb0153ff4f3840416cc2322f129c086e6"
+  integrity sha512-usBzw9aCRDvchpok6C+4TXC57btc4bJtmKQWOHQxOVKen1ZfVqBUuCZ/wuqdX5GHsD0NRSr9XTP+5ID1ZZQBXw==
+  dependencies:
+    "@csstools/utilities" "^2.0.0"
+    postcss-value-parser "^4.2.0"
+
+"@csstools/postcss-gamut-mapping@^2.0.10":
+  version "2.0.10"
+  resolved "https://registry.yarnpkg.com/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-2.0.10.tgz#f518d941231d721dbecf5b41e3c441885ff2f28b"
+  integrity sha512-QDGqhJlvFnDlaPAfCYPsnwVA6ze+8hhrwevYWlnUeSjkkZfBpcCO42SaUD8jiLlq7niouyLgvup5lh+f1qessg==
+  dependencies:
+    "@csstools/css-color-parser" "^3.0.10"
+    "@csstools/css-parser-algorithms" "^3.0.5"
+    "@csstools/css-tokenizer" "^3.0.4"
+
+"@csstools/postcss-gradients-interpolation-method@^5.0.10":
+  version "5.0.10"
+  resolved "https://registry.yarnpkg.com/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-5.0.10.tgz#3146da352c31142a721fdba062ac3a6d11dbbec3"
+  integrity sha512-HHPauB2k7Oits02tKFUeVFEU2ox/H3OQVrP3fSOKDxvloOikSal+3dzlyTZmYsb9FlY9p5EUpBtz0//XBmy+aw==
+  dependencies:
+    "@csstools/css-color-parser" "^3.0.10"
+    "@csstools/css-parser-algorithms" "^3.0.5"
+    "@csstools/css-tokenizer" "^3.0.4"
+    "@csstools/postcss-progressive-custom-properties" "^4.1.0"
+    "@csstools/utilities" "^2.0.0"
+
+"@csstools/postcss-hwb-function@^4.0.10":
+  version "4.0.10"
+  resolved "https://registry.yarnpkg.com/@csstools/postcss-hwb-function/-/postcss-hwb-function-4.0.10.tgz#f93f3c457e6440ac37ef9b908feb5d901b417d50"
+  integrity sha512-nOKKfp14SWcdEQ++S9/4TgRKchooLZL0TUFdun3nI4KPwCjETmhjta1QT4ICQcGVWQTvrsgMM/aLB5We+kMHhQ==
+  dependencies:
+    "@csstools/css-color-parser" "^3.0.10"
+    "@csstools/css-parser-algorithms" "^3.0.5"
+    "@csstools/css-tokenizer" "^3.0.4"
+    "@csstools/postcss-progressive-custom-properties" "^4.1.0"
+    "@csstools/utilities" "^2.0.0"
+
+"@csstools/postcss-ic-unit@^4.0.2":
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/@csstools/postcss-ic-unit/-/postcss-ic-unit-4.0.2.tgz#7561e09db65fac8304ceeab9dd3e5c6e43414587"
+  integrity sha512-lrK2jjyZwh7DbxaNnIUjkeDmU8Y6KyzRBk91ZkI5h8nb1ykEfZrtIVArdIjX4DHMIBGpdHrgP0n4qXDr7OHaKA==
+  dependencies:
+    "@csstools/postcss-progressive-custom-properties" "^4.1.0"
+    "@csstools/utilities" "^2.0.0"
+    postcss-value-parser "^4.2.0"
+
+"@csstools/postcss-initial@^2.0.1":
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/@csstools/postcss-initial/-/postcss-initial-2.0.1.tgz#c385bd9d8ad31ad159edd7992069e97ceea4d09a"
+  integrity sha512-L1wLVMSAZ4wovznquK0xmC7QSctzO4D0Is590bxpGqhqjboLXYA16dWZpfwImkdOgACdQ9PqXsuRroW6qPlEsg==
+
+"@csstools/postcss-is-pseudo-class@^5.0.3":
+  version "5.0.3"
+  resolved "https://registry.yarnpkg.com/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-5.0.3.tgz#d34e850bcad4013c2ed7abe948bfa0448aa8eb74"
+  integrity sha512-jS/TY4SpG4gszAtIg7Qnf3AS2pjcUM5SzxpApOrlndMeGhIbaTzWBzzP/IApXoNWEW7OhcjkRT48jnAUIFXhAQ==
+  dependencies:
+    "@csstools/selector-specificity" "^5.0.0"
+    postcss-selector-parser "^7.0.0"
+
+"@csstools/postcss-light-dark-function@^2.0.9":
+  version "2.0.9"
+  resolved "https://registry.yarnpkg.com/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-2.0.9.tgz#9fb080188907539734a9d5311d2a1cb82531ef38"
+  integrity sha512-1tCZH5bla0EAkFAI2r0H33CDnIBeLUaJh1p+hvvsylJ4svsv2wOmJjJn+OXwUZLXef37GYbRIVKX+X+g6m+3CQ==
+  dependencies:
+    "@csstools/css-parser-algorithms" "^3.0.5"
+    "@csstools/css-tokenizer" "^3.0.4"
+    "@csstools/postcss-progressive-custom-properties" "^4.1.0"
+    "@csstools/utilities" "^2.0.0"
+
+"@csstools/postcss-logical-float-and-clear@^3.0.0":
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-float-and-clear/-/postcss-logical-float-and-clear-3.0.0.tgz#62617564182cf86ab5d4e7485433ad91e4c58571"
+  integrity sha512-SEmaHMszwakI2rqKRJgE+8rpotFfne1ZS6bZqBoQIicFyV+xT1UF42eORPxJkVJVrH9C0ctUgwMSn3BLOIZldQ==
+
+"@csstools/postcss-logical-overflow@^2.0.0":
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-overflow/-/postcss-logical-overflow-2.0.0.tgz#c6de7c5f04e3d4233731a847f6c62819bcbcfa1d"
+  integrity sha512-spzR1MInxPuXKEX2csMamshR4LRaSZ3UXVaRGjeQxl70ySxOhMpP2252RAFsg8QyyBXBzuVOOdx1+bVO5bPIzA==
+
+"@csstools/postcss-logical-overscroll-behavior@^2.0.0":
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-overscroll-behavior/-/postcss-logical-overscroll-behavior-2.0.0.tgz#43c03eaecdf34055ef53bfab691db6dc97a53d37"
+  integrity sha512-e/webMjoGOSYfqLunyzByZj5KKe5oyVg/YSbie99VEaSDE2kimFm0q1f6t/6Jo+VVCQ/jbe2Xy+uX+C4xzWs4w==
+
+"@csstools/postcss-logical-resize@^3.0.0":
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-resize/-/postcss-logical-resize-3.0.0.tgz#4df0eeb1a61d7bd85395e56a5cce350b5dbfdca6"
+  integrity sha512-DFbHQOFW/+I+MY4Ycd/QN6Dg4Hcbb50elIJCfnwkRTCX05G11SwViI5BbBlg9iHRl4ytB7pmY5ieAFk3ws7yyg==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+"@csstools/postcss-logical-viewport-units@^3.0.4":
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-3.0.4.tgz#016d98a8b7b5f969e58eb8413447eb801add16fc"
+  integrity sha512-q+eHV1haXA4w9xBwZLKjVKAWn3W2CMqmpNpZUk5kRprvSiBEGMgrNH3/sJZ8UA3JgyHaOt3jwT9uFa4wLX4EqQ==
+  dependencies:
+    "@csstools/css-tokenizer" "^3.0.4"
+    "@csstools/utilities" "^2.0.0"
+
+"@csstools/postcss-media-minmax@^2.0.9":
+  version "2.0.9"
+  resolved "https://registry.yarnpkg.com/@csstools/postcss-media-minmax/-/postcss-media-minmax-2.0.9.tgz#184252d5b93155ae526689328af6bdf3fc113987"
+  integrity sha512-af9Qw3uS3JhYLnCbqtZ9crTvvkR+0Se+bBqSr7ykAnl9yKhk6895z9rf+2F4dClIDJWxgn0iZZ1PSdkhrbs2ig==
+  dependencies:
+    "@csstools/css-calc" "^2.1.4"
+    "@csstools/css-parser-algorithms" "^3.0.5"
+    "@csstools/css-tokenizer" "^3.0.4"
+    "@csstools/media-query-list-parser" "^4.0.3"
+
+"@csstools/postcss-media-queries-aspect-ratio-number-values@^3.0.5":
+  version "3.0.5"
+  resolved "https://registry.yarnpkg.com/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-3.0.5.tgz#f485c31ec13d6b0fb5c528a3474334a40eff5f11"
+  integrity sha512-zhAe31xaaXOY2Px8IYfoVTB3wglbJUVigGphFLj6exb7cjZRH9A6adyE22XfFK3P2PzwRk0VDeTJmaxpluyrDg==
+  dependencies:
+    "@csstools/css-parser-algorithms" "^3.0.5"
+    "@csstools/css-tokenizer" "^3.0.4"
+    "@csstools/media-query-list-parser" "^4.0.3"
+
+"@csstools/postcss-nested-calc@^4.0.0":
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/@csstools/postcss-nested-calc/-/postcss-nested-calc-4.0.0.tgz#754e10edc6958d664c11cde917f44ba144141c62"
+  integrity sha512-jMYDdqrQQxE7k9+KjstC3NbsmC063n1FTPLCgCRS2/qHUbHM0mNy9pIn4QIiQGs9I/Bg98vMqw7mJXBxa0N88A==
+  dependencies:
+    "@csstools/utilities" "^2.0.0"
+    postcss-value-parser "^4.2.0"
+
+"@csstools/postcss-normalize-display-values@^4.0.0":
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.0.tgz#ecdde2daf4e192e5da0c6fd933b6d8aff32f2a36"
+  integrity sha512-HlEoG0IDRoHXzXnkV4in47dzsxdsjdz6+j7MLjaACABX2NfvjFS6XVAnpaDyGesz9gK2SC7MbNwdCHusObKJ9Q==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+"@csstools/postcss-oklab-function@^4.0.10":
+  version "4.0.10"
+  resolved "https://registry.yarnpkg.com/@csstools/postcss-oklab-function/-/postcss-oklab-function-4.0.10.tgz#d4c23c51dd0be45e6dedde22432d7d0003710780"
+  integrity sha512-ZzZUTDd0fgNdhv8UUjGCtObPD8LYxMH+MJsW9xlZaWTV8Ppr4PtxlHYNMmF4vVWGl0T6f8tyWAKjoI6vePSgAg==
+  dependencies:
+    "@csstools/css-color-parser" "^3.0.10"
+    "@csstools/css-parser-algorithms" "^3.0.5"
+    "@csstools/css-tokenizer" "^3.0.4"
+    "@csstools/postcss-progressive-custom-properties" "^4.1.0"
+    "@csstools/utilities" "^2.0.0"
+
+"@csstools/postcss-progressive-custom-properties@^4.1.0":
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-4.1.0.tgz#70c8d41b577f4023633b7e3791604e0b7f3775bc"
+  integrity sha512-YrkI9dx8U4R8Sz2EJaoeD9fI7s7kmeEBfmO+UURNeL6lQI7VxF6sBE+rSqdCBn4onwqmxFdBU3lTwyYb/lCmxA==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+"@csstools/postcss-random-function@^2.0.1":
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/@csstools/postcss-random-function/-/postcss-random-function-2.0.1.tgz#3191f32fe72936e361dadf7dbfb55a0209e2691e"
+  integrity sha512-q+FQaNiRBhnoSNo+GzqGOIBKoHQ43lYz0ICrV+UudfWnEF6ksS6DsBIJSISKQT2Bvu3g4k6r7t0zYrk5pDlo8w==
+  dependencies:
+    "@csstools/css-calc" "^2.1.4"
+    "@csstools/css-parser-algorithms" "^3.0.5"
+    "@csstools/css-tokenizer" "^3.0.4"
+
+"@csstools/postcss-relative-color-syntax@^3.0.10":
+  version "3.0.10"
+  resolved "https://registry.yarnpkg.com/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-3.0.10.tgz#daa840583969461e1e06b12e9c591e52a790ec86"
+  integrity sha512-8+0kQbQGg9yYG8hv0dtEpOMLwB9M+P7PhacgIzVzJpixxV4Eq9AUQtQw8adMmAJU1RBBmIlpmtmm3XTRd/T00g==
+  dependencies:
+    "@csstools/css-color-parser" "^3.0.10"
+    "@csstools/css-parser-algorithms" "^3.0.5"
+    "@csstools/css-tokenizer" "^3.0.4"
+    "@csstools/postcss-progressive-custom-properties" "^4.1.0"
+    "@csstools/utilities" "^2.0.0"
+
+"@csstools/postcss-scope-pseudo-class@^4.0.1":
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/@csstools/postcss-scope-pseudo-class/-/postcss-scope-pseudo-class-4.0.1.tgz#9fe60e9d6d91d58fb5fc6c768a40f6e47e89a235"
+  integrity sha512-IMi9FwtH6LMNuLea1bjVMQAsUhFxJnyLSgOp/cpv5hrzWmrUYU5fm0EguNDIIOHUqzXode8F/1qkC/tEo/qN8Q==
+  dependencies:
+    postcss-selector-parser "^7.0.0"
+
+"@csstools/postcss-sign-functions@^1.1.4":
+  version "1.1.4"
+  resolved "https://registry.yarnpkg.com/@csstools/postcss-sign-functions/-/postcss-sign-functions-1.1.4.tgz#a9ac56954014ae4c513475b3f1b3e3424a1e0c12"
+  integrity sha512-P97h1XqRPcfcJndFdG95Gv/6ZzxUBBISem0IDqPZ7WMvc/wlO+yU0c5D/OCpZ5TJoTt63Ok3knGk64N+o6L2Pg==
+  dependencies:
+    "@csstools/css-calc" "^2.1.4"
+    "@csstools/css-parser-algorithms" "^3.0.5"
+    "@csstools/css-tokenizer" "^3.0.4"
+
+"@csstools/postcss-stepped-value-functions@^4.0.9":
+  version "4.0.9"
+  resolved "https://registry.yarnpkg.com/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-4.0.9.tgz#36036f1a0e5e5ee2308e72f3c9cb433567c387b9"
+  integrity sha512-h9btycWrsex4dNLeQfyU3y3w40LMQooJWFMm/SK9lrKguHDcFl4VMkncKKoXi2z5rM9YGWbUQABI8BT2UydIcA==
+  dependencies:
+    "@csstools/css-calc" "^2.1.4"
+    "@csstools/css-parser-algorithms" "^3.0.5"
+    "@csstools/css-tokenizer" "^3.0.4"
+
+"@csstools/postcss-text-decoration-shorthand@^4.0.2":
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-4.0.2.tgz#a3bcf80492e6dda36477538ab8e8943908c9f80a"
+  integrity sha512-8XvCRrFNseBSAGxeaVTaNijAu+FzUvjwFXtcrynmazGb/9WUdsPCpBX+mHEHShVRq47Gy4peYAoxYs8ltUnmzA==
+  dependencies:
+    "@csstools/color-helpers" "^5.0.2"
+    postcss-value-parser "^4.2.0"
+
+"@csstools/postcss-trigonometric-functions@^4.0.9":
+  version "4.0.9"
+  resolved "https://registry.yarnpkg.com/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-4.0.9.tgz#3f94ed2e319b57f2c59720b64e4d0a8a6fb8c3b2"
+  integrity sha512-Hnh5zJUdpNrJqK9v1/E3BbrQhaDTj5YiX7P61TOvUhoDHnUmsNNxcDAgkQ32RrcWx9GVUvfUNPcUkn8R3vIX6A==
+  dependencies:
+    "@csstools/css-calc" "^2.1.4"
+    "@csstools/css-parser-algorithms" "^3.0.5"
+    "@csstools/css-tokenizer" "^3.0.4"
+
+"@csstools/postcss-unset-value@^4.0.0":
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/@csstools/postcss-unset-value/-/postcss-unset-value-4.0.0.tgz#7caa981a34196d06a737754864baf77d64de4bba"
+  integrity sha512-cBz3tOCI5Fw6NIFEwU3RiwK6mn3nKegjpJuzCndoGq3BZPkUjnsq7uQmIeMNeMbMk7YD2MfKcgCpZwX5jyXqCA==
+
+"@csstools/selector-resolve-nested@^3.1.0":
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.1.0.tgz#848c6f44cb65e3733e478319b9342b7aa436fac7"
+  integrity sha512-mf1LEW0tJLKfWyvn5KdDrhpxHyuxpbNwTIwOYLIvsTffeyOf85j5oIzfG0yosxDgx/sswlqBnESYUcQH0vgZ0g==
+
+"@csstools/selector-specificity@^5.0.0":
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz#037817b574262134cabd68fc4ec1a454f168407b"
+  integrity sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==
+
+"@csstools/utilities@^2.0.0":
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/@csstools/utilities/-/utilities-2.0.0.tgz#f7ff0fee38c9ffb5646d47b6906e0bc8868bde60"
+  integrity sha512-5VdOr0Z71u+Yp3ozOx8T11N703wIFGVRgOWbOZMKgglPJsWA54MRIoMNVMa7shUToIhx5J8vX4sOZgD2XiihiQ==
+
+"@discoveryjs/json-ext@0.5.7":
+  version "0.5.7"
+  resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70"
+  integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==
+
+"@docsearch/css@3.9.0":
+  version "3.9.0"
+  resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-3.9.0.tgz#3bc29c96bf024350d73b0cfb7c2a7b71bf251cd5"
+  integrity sha512-cQbnVbq0rrBwNAKegIac/t6a8nWoUAn8frnkLFW6YARaRmAQr5/Eoe6Ln2fqkUCZ40KpdrKbpSAmgrkviOxuWA==
+
+"@docsearch/react@^3.9.0":
+  version "3.9.0"
+  resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-3.9.0.tgz#d0842b700c3ee26696786f3c8ae9f10c1a3f0db3"
+  integrity sha512-mb5FOZYZIkRQ6s/NWnM98k879vu5pscWqTLubLFBO87igYYT4VzVazh4h5o/zCvTIZgEt3PvsCOMOswOUo9yHQ==
+  dependencies:
+    "@algolia/autocomplete-core" "1.17.9"
+    "@algolia/autocomplete-preset-algolia" "1.17.9"
+    "@docsearch/css" "3.9.0"
+    algoliasearch "^5.14.2"
+
+"@docusaurus/babel@3.8.1":
+  version "3.8.1"
+  resolved "https://registry.yarnpkg.com/@docusaurus/babel/-/babel-3.8.1.tgz#db329ac047184214e08e2dbc809832c696c18506"
+  integrity sha512-3brkJrml8vUbn9aeoZUlJfsI/GqyFcDgQJwQkmBtclJgWDEQBKKeagZfOgx0WfUQhagL1sQLNW0iBdxnI863Uw==
+  dependencies:
+    "@babel/core" "^7.25.9"
+    "@babel/generator" "^7.25.9"
+    "@babel/plugin-syntax-dynamic-import" "^7.8.3"
+    "@babel/plugin-transform-runtime" "^7.25.9"
+    "@babel/preset-env" "^7.25.9"
+    "@babel/preset-react" "^7.25.9"
+    "@babel/preset-typescript" "^7.25.9"
+    "@babel/runtime" "^7.25.9"
+    "@babel/runtime-corejs3" "^7.25.9"
+    "@babel/traverse" "^7.25.9"
+    "@docusaurus/logger" "3.8.1"
+    "@docusaurus/utils" "3.8.1"
+    babel-plugin-dynamic-import-node "^2.3.3"
+    fs-extra "^11.1.1"
+    tslib "^2.6.0"
+
+"@docusaurus/bundler@3.8.1":
+  version "3.8.1"
+  resolved "https://registry.yarnpkg.com/@docusaurus/bundler/-/bundler-3.8.1.tgz#e2b11d615f09a6e470774bb36441b8d06736b94c"
+  integrity sha512-/z4V0FRoQ0GuSLToNjOSGsk6m2lQUG4FRn8goOVoZSRsTrU8YR2aJacX5K3RG18EaX9b+52pN4m1sL3MQZVsQA==
+  dependencies:
+    "@babel/core" "^7.25.9"
+    "@docusaurus/babel" "3.8.1"
+    "@docusaurus/cssnano-preset" "3.8.1"
+    "@docusaurus/logger" "3.8.1"
+    "@docusaurus/types" "3.8.1"
+    "@docusaurus/utils" "3.8.1"
+    babel-loader "^9.2.1"
+    clean-css "^5.3.3"
+    copy-webpack-plugin "^11.0.0"
+    css-loader "^6.11.0"
+    css-minimizer-webpack-plugin "^5.0.1"
+    cssnano "^6.1.2"
+    file-loader "^6.2.0"
+    html-minifier-terser "^7.2.0"
+    mini-css-extract-plugin "^2.9.2"
+    null-loader "^4.0.1"
+    postcss "^8.5.4"
+    postcss-loader "^7.3.4"
+    postcss-preset-env "^10.2.1"
+    terser-webpack-plugin "^5.3.9"
+    tslib "^2.6.0"
+    url-loader "^4.1.1"
+    webpack "^5.95.0"
+    webpackbar "^6.0.1"
+
+"@docusaurus/core@3.8.1", "@docusaurus/core@^3.8.0":
+  version "3.8.1"
+  resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-3.8.1.tgz#c22e47c16a22cb7d245306c64bc54083838ff3db"
+  integrity sha512-ENB01IyQSqI2FLtOzqSI3qxG2B/jP4gQPahl2C3XReiLebcVh5B5cB9KYFvdoOqOWPyr5gXK4sjgTKv7peXCrA==
+  dependencies:
+    "@docusaurus/babel" "3.8.1"
+    "@docusaurus/bundler" "3.8.1"
+    "@docusaurus/logger" "3.8.1"
+    "@docusaurus/mdx-loader" "3.8.1"
+    "@docusaurus/utils" "3.8.1"
+    "@docusaurus/utils-common" "3.8.1"
+    "@docusaurus/utils-validation" "3.8.1"
+    boxen "^6.2.1"
+    chalk "^4.1.2"
+    chokidar "^3.5.3"
+    cli-table3 "^0.6.3"
+    combine-promises "^1.1.0"
+    commander "^5.1.0"
+    core-js "^3.31.1"
+    detect-port "^1.5.1"
+    escape-html "^1.0.3"
+    eta "^2.2.0"
+    eval "^0.1.8"
+    execa "5.1.1"
+    fs-extra "^11.1.1"
+    html-tags "^3.3.1"
+    html-webpack-plugin "^5.6.0"
+    leven "^3.1.0"
+    lodash "^4.17.21"
+    open "^8.4.0"
+    p-map "^4.0.0"
+    prompts "^2.4.2"
+    react-helmet-async "npm:@slorber/react-helmet-async@1.3.0"
+    react-loadable "npm:@docusaurus/react-loadable@6.0.0"
+    react-loadable-ssr-addon-v5-slorber "^1.0.1"
+    react-router "^5.3.4"
+    react-router-config "^5.1.1"
+    react-router-dom "^5.3.4"
+    semver "^7.5.4"
+    serve-handler "^6.1.6"
+    tinypool "^1.0.2"
+    tslib "^2.6.0"
+    update-notifier "^6.0.2"
+    webpack "^5.95.0"
+    webpack-bundle-analyzer "^4.10.2"
+    webpack-dev-server "^4.15.2"
+    webpack-merge "^6.0.1"
+
+"@docusaurus/cssnano-preset@3.8.1":
+  version "3.8.1"
+  resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-3.8.1.tgz#bd55026251a6ab8e2194839a2042458ef9880c44"
+  integrity sha512-G7WyR2N6SpyUotqhGznERBK+x84uyhfMQM2MmDLs88bw4Flom6TY46HzkRkSEzaP9j80MbTN8naiL1fR17WQug==
+  dependencies:
+    cssnano-preset-advanced "^6.1.2"
+    postcss "^8.5.4"
+    postcss-sort-media-queries "^5.2.0"
+    tslib "^2.6.0"
+
+"@docusaurus/logger@3.8.1":
+  version "3.8.1"
+  resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-3.8.1.tgz#45321b2e2e14695d0dbd8b4104ea7b0fbaa98700"
+  integrity sha512-2wjeGDhKcExEmjX8k1N/MRDiPKXGF2Pg+df/bDDPnnJWHXnVEZxXj80d6jcxp1Gpnksl0hF8t/ZQw9elqj2+ww==
+  dependencies:
+    chalk "^4.1.2"
+    tslib "^2.6.0"
+
+"@docusaurus/mdx-loader@3.8.1":
+  version "3.8.1"
+  resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-3.8.1.tgz#74309b3614bbcef1d55fb13e6cc339b7fb000b5f"
+  integrity sha512-DZRhagSFRcEq1cUtBMo4TKxSNo/W6/s44yhr8X+eoXqCLycFQUylebOMPseHi5tc4fkGJqwqpWJLz6JStU9L4w==
+  dependencies:
+    "@docusaurus/logger" "3.8.1"
+    "@docusaurus/utils" "3.8.1"
+    "@docusaurus/utils-validation" "3.8.1"
+    "@mdx-js/mdx" "^3.0.0"
+    "@slorber/remark-comment" "^1.0.0"
+    escape-html "^1.0.3"
+    estree-util-value-to-estree "^3.0.1"
+    file-loader "^6.2.0"
+    fs-extra "^11.1.1"
+    image-size "^2.0.2"
+    mdast-util-mdx "^3.0.0"
+    mdast-util-to-string "^4.0.0"
+    rehype-raw "^7.0.0"
+    remark-directive "^3.0.0"
+    remark-emoji "^4.0.0"
+    remark-frontmatter "^5.0.0"
+    remark-gfm "^4.0.0"
+    stringify-object "^3.3.0"
+    tslib "^2.6.0"
+    unified "^11.0.3"
+    unist-util-visit "^5.0.0"
+    url-loader "^4.1.1"
+    vfile "^6.0.1"
+    webpack "^5.88.1"
+
+"@docusaurus/module-type-aliases@3.8.1", "@docusaurus/module-type-aliases@^3.8.0":
+  version "3.8.1"
+  resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-3.8.1.tgz#454de577bd7f50b5eae16db0f76b49ca5e4e281a"
+  integrity sha512-6xhvAJiXzsaq3JdosS7wbRt/PwEPWHr9eM4YNYqVlbgG1hSK3uQDXTVvQktasp3VO6BmfYWPozueLWuj4gB+vg==
+  dependencies:
+    "@docusaurus/types" "3.8.1"
+    "@types/history" "^4.7.11"
+    "@types/react" "*"
+    "@types/react-router-config" "*"
+    "@types/react-router-dom" "*"
+    react-helmet-async "npm:@slorber/react-helmet-async@1.3.0"
+    react-loadable "npm:@docusaurus/react-loadable@6.0.0"
+
+"@docusaurus/plugin-content-blog@3.8.1":
+  version "3.8.1"
+  resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.8.1.tgz#88d842b562b04cf59df900d9f6984b086f821525"
+  integrity sha512-vNTpMmlvNP9n3hGEcgPaXyvTljanAKIUkuG9URQ1DeuDup0OR7Ltvoc8yrmH+iMZJbcQGhUJF+WjHLwuk8HSdw==
+  dependencies:
+    "@docusaurus/core" "3.8.1"
+    "@docusaurus/logger" "3.8.1"
+    "@docusaurus/mdx-loader" "3.8.1"
+    "@docusaurus/theme-common" "3.8.1"
+    "@docusaurus/types" "3.8.1"
+    "@docusaurus/utils" "3.8.1"
+    "@docusaurus/utils-common" "3.8.1"
+    "@docusaurus/utils-validation" "3.8.1"
+    cheerio "1.0.0-rc.12"
+    feed "^4.2.2"
+    fs-extra "^11.1.1"
+    lodash "^4.17.21"
+    schema-dts "^1.1.2"
+    srcset "^4.0.0"
+    tslib "^2.6.0"
+    unist-util-visit "^5.0.0"
+    utility-types "^3.10.0"
+    webpack "^5.88.1"
+
+"@docusaurus/plugin-content-docs@3.8.1", "@docusaurus/plugin-content-docs@^3.8.0":
+  version "3.8.1"
+  resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.8.1.tgz#40686a206abb6373bee5638de100a2c312f112a4"
+  integrity sha512-oByRkSZzeGNQByCMaX+kif5Nl2vmtj2IHQI2fWjCfCootsdKZDPFLonhIp5s3IGJO7PLUfe0POyw0Xh/RrGXJA==
+  dependencies:
+    "@docusaurus/core" "3.8.1"
+    "@docusaurus/logger" "3.8.1"
+    "@docusaurus/mdx-loader" "3.8.1"
+    "@docusaurus/module-type-aliases" "3.8.1"
+    "@docusaurus/theme-common" "3.8.1"
+    "@docusaurus/types" "3.8.1"
+    "@docusaurus/utils" "3.8.1"
+    "@docusaurus/utils-common" "3.8.1"
+    "@docusaurus/utils-validation" "3.8.1"
+    "@types/react-router-config" "^5.0.7"
+    combine-promises "^1.1.0"
+    fs-extra "^11.1.1"
+    js-yaml "^4.1.0"
+    lodash "^4.17.21"
+    schema-dts "^1.1.2"
+    tslib "^2.6.0"
+    utility-types "^3.10.0"
+    webpack "^5.88.1"
+
+"@docusaurus/plugin-content-pages@3.8.1":
+  version "3.8.1"
+  resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.8.1.tgz#41b684dbd15390b7bb6a627f78bf81b6324511ac"
+  integrity sha512-a+V6MS2cIu37E/m7nDJn3dcxpvXb6TvgdNI22vJX8iUTp8eoMoPa0VArEbWvCxMY/xdC26WzNv4wZ6y0iIni/w==
+  dependencies:
+    "@docusaurus/core" "3.8.1"
+    "@docusaurus/mdx-loader" "3.8.1"
+    "@docusaurus/types" "3.8.1"
+    "@docusaurus/utils" "3.8.1"
+    "@docusaurus/utils-validation" "3.8.1"
+    fs-extra "^11.1.1"
+    tslib "^2.6.0"
+    webpack "^5.88.1"
+
+"@docusaurus/plugin-css-cascade-layers@3.8.1":
+  version "3.8.1"
+  resolved "https://registry.yarnpkg.com/@docusaurus/plugin-css-cascade-layers/-/plugin-css-cascade-layers-3.8.1.tgz#cb414b4a82aa60fc64ef2a435ad0105e142a6c71"
+  integrity sha512-VQ47xRxfNKjHS5ItzaVXpxeTm7/wJLFMOPo1BkmoMG4Cuz4nuI+Hs62+RMk1OqVog68Swz66xVPK8g9XTrBKRw==
+  dependencies:
+    "@docusaurus/core" "3.8.1"
+    "@docusaurus/types" "3.8.1"
+    "@docusaurus/utils" "3.8.1"
+    "@docusaurus/utils-validation" "3.8.1"
+    tslib "^2.6.0"
+
+"@docusaurus/plugin-debug@3.8.1":
+  version "3.8.1"
+  resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-3.8.1.tgz#45b107e46b627caaae66995f53197ace78af3491"
+  integrity sha512-nT3lN7TV5bi5hKMB7FK8gCffFTBSsBsAfV84/v293qAmnHOyg1nr9okEw8AiwcO3bl9vije5nsUvP0aRl2lpaw==
+  dependencies:
+    "@docusaurus/core" "3.8.1"
+    "@docusaurus/types" "3.8.1"
+    "@docusaurus/utils" "3.8.1"
+    fs-extra "^11.1.1"
+    react-json-view-lite "^2.3.0"
+    tslib "^2.6.0"
+
+"@docusaurus/plugin-google-analytics@3.8.1":
+  version "3.8.1"
+  resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.8.1.tgz#64a302e62fe5cb6e007367c964feeef7b056764a"
+  integrity sha512-Hrb/PurOJsmwHAsfMDH6oVpahkEGsx7F8CWMjyP/dw1qjqmdS9rcV1nYCGlM8nOtD3Wk/eaThzUB5TSZsGz+7Q==
+  dependencies:
+    "@docusaurus/core" "3.8.1"
+    "@docusaurus/types" "3.8.1"
+    "@docusaurus/utils-validation" "3.8.1"
+    tslib "^2.6.0"
+
+"@docusaurus/plugin-google-gtag@3.8.1":
+  version "3.8.1"
+  resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.8.1.tgz#8c76f8a1d96448f2f0f7b10e6bde451c40672b95"
+  integrity sha512-tKE8j1cEZCh8KZa4aa80zpSTxsC2/ZYqjx6AAfd8uA8VHZVw79+7OTEP2PoWi0uL5/1Is0LF5Vwxd+1fz5HlKg==
+  dependencies:
+    "@docusaurus/core" "3.8.1"
+    "@docusaurus/types" "3.8.1"
+    "@docusaurus/utils-validation" "3.8.1"
+    "@types/gtag.js" "^0.0.12"
+    tslib "^2.6.0"
+
+"@docusaurus/plugin-google-tag-manager@3.8.1":
+  version "3.8.1"
+  resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.8.1.tgz#88241ffd06369f4a4d5fb982ff3ac2777561ae37"
+  integrity sha512-iqe3XKITBquZq+6UAXdb1vI0fPY5iIOitVjPQ581R1ZKpHr0qe+V6gVOrrcOHixPDD/BUKdYwkxFjpNiEN+vBw==
+  dependencies:
+    "@docusaurus/core" "3.8.1"
+    "@docusaurus/types" "3.8.1"
+    "@docusaurus/utils-validation" "3.8.1"
+    tslib "^2.6.0"
+
+"@docusaurus/plugin-sitemap@3.8.1":
+  version "3.8.1"
+  resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.8.1.tgz#3aebd39186dc30e53023f1aab44625bc0bdac892"
+  integrity sha512-+9YV/7VLbGTq8qNkjiugIelmfUEVkTyLe6X8bWq7K5qPvGXAjno27QAfFq63mYfFFbJc7z+pudL63acprbqGzw==
+  dependencies:
+    "@docusaurus/core" "3.8.1"
+    "@docusaurus/logger" "3.8.1"
+    "@docusaurus/types" "3.8.1"
+    "@docusaurus/utils" "3.8.1"
+    "@docusaurus/utils-common" "3.8.1"
+    "@docusaurus/utils-validation" "3.8.1"
+    fs-extra "^11.1.1"
+    sitemap "^7.1.1"
+    tslib "^2.6.0"
+
+"@docusaurus/plugin-svgr@3.8.1":
+  version "3.8.1"
+  resolved "https://registry.yarnpkg.com/@docusaurus/plugin-svgr/-/plugin-svgr-3.8.1.tgz#6f340be8eae418a2cce540d8ece096ffd9c9b6ab"
+  integrity sha512-rW0LWMDsdlsgowVwqiMb/7tANDodpy1wWPwCcamvhY7OECReN3feoFwLjd/U4tKjNY3encj0AJSTxJA+Fpe+Gw==
+  dependencies:
+    "@docusaurus/core" "3.8.1"
+    "@docusaurus/types" "3.8.1"
+    "@docusaurus/utils" "3.8.1"
+    "@docusaurus/utils-validation" "3.8.1"
+    "@svgr/core" "8.1.0"
+    "@svgr/webpack" "^8.1.0"
+    tslib "^2.6.0"
+    webpack "^5.88.1"
+
+"@docusaurus/preset-classic@^3.8.0":
+  version "3.8.1"
+  resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-3.8.1.tgz#bb79fd12f3211363720c569a526c7e24d3aa966b"
+  integrity sha512-yJSjYNHXD8POMGc2mKQuj3ApPrN+eG0rO1UPgSx7jySpYU+n4WjBikbrA2ue5ad9A7aouEtMWUoiSRXTH/g7KQ==
+  dependencies:
+    "@docusaurus/core" "3.8.1"
+    "@docusaurus/plugin-content-blog" "3.8.1"
+    "@docusaurus/plugin-content-docs" "3.8.1"
+    "@docusaurus/plugin-content-pages" "3.8.1"
+    "@docusaurus/plugin-css-cascade-layers" "3.8.1"
+    "@docusaurus/plugin-debug" "3.8.1"
+    "@docusaurus/plugin-google-analytics" "3.8.1"
+    "@docusaurus/plugin-google-gtag" "3.8.1"
+    "@docusaurus/plugin-google-tag-manager" "3.8.1"
+    "@docusaurus/plugin-sitemap" "3.8.1"
+    "@docusaurus/plugin-svgr" "3.8.1"
+    "@docusaurus/theme-classic" "3.8.1"
+    "@docusaurus/theme-common" "3.8.1"
+    "@docusaurus/theme-search-algolia" "3.8.1"
+    "@docusaurus/types" "3.8.1"
+
+"@docusaurus/theme-classic@3.8.1":
+  version "3.8.1"
+  resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-3.8.1.tgz#1e45c66d89ded359225fcd29bf3258d9205765c1"
+  integrity sha512-bqDUCNqXeYypMCsE1VcTXSI1QuO4KXfx8Cvl6rYfY0bhhqN6d2WZlRkyLg/p6pm+DzvanqHOyYlqdPyP0iz+iw==
+  dependencies:
+    "@docusaurus/core" "3.8.1"
+    "@docusaurus/logger" "3.8.1"
+    "@docusaurus/mdx-loader" "3.8.1"
+    "@docusaurus/module-type-aliases" "3.8.1"
+    "@docusaurus/plugin-content-blog" "3.8.1"
+    "@docusaurus/plugin-content-docs" "3.8.1"
+    "@docusaurus/plugin-content-pages" "3.8.1"
+    "@docusaurus/theme-common" "3.8.1"
+    "@docusaurus/theme-translations" "3.8.1"
+    "@docusaurus/types" "3.8.1"
+    "@docusaurus/utils" "3.8.1"
+    "@docusaurus/utils-common" "3.8.1"
+    "@docusaurus/utils-validation" "3.8.1"
+    "@mdx-js/react" "^3.0.0"
+    clsx "^2.0.0"
+    copy-text-to-clipboard "^3.2.0"
+    infima "0.2.0-alpha.45"
+    lodash "^4.17.21"
+    nprogress "^0.2.0"
+    postcss "^8.5.4"
+    prism-react-renderer "^2.3.0"
+    prismjs "^1.29.0"
+    react-router-dom "^5.3.4"
+    rtlcss "^4.1.0"
+    tslib "^2.6.0"
+    utility-types "^3.10.0"
+
+"@docusaurus/theme-common@3.8.1":
+  version "3.8.1"
+  resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-3.8.1.tgz#17c23316fbe3ee3f7e707c7298cb59a0fff38b4b"
+  integrity sha512-UswMOyTnPEVRvN5Qzbo+l8k4xrd5fTFu2VPPfD6FcW/6qUtVLmJTQCktbAL3KJ0BVXGm5aJXz/ZrzqFuZERGPw==
+  dependencies:
+    "@docusaurus/mdx-loader" "3.8.1"
+    "@docusaurus/module-type-aliases" "3.8.1"
+    "@docusaurus/utils" "3.8.1"
+    "@docusaurus/utils-common" "3.8.1"
+    "@types/history" "^4.7.11"
+    "@types/react" "*"
+    "@types/react-router-config" "*"
+    clsx "^2.0.0"
+    parse-numeric-range "^1.3.0"
+    prism-react-renderer "^2.3.0"
+    tslib "^2.6.0"
+    utility-types "^3.10.0"
+
+"@docusaurus/theme-mermaid@^3.8.0":
+  version "3.8.1"
+  resolved "https://registry.yarnpkg.com/@docusaurus/theme-mermaid/-/theme-mermaid-3.8.1.tgz#2b73b5e90057bd9fb46f267aeb2d3470b168a7c8"
+  integrity sha512-IWYqjyTPjkNnHsFFu9+4YkeXS7PD1xI3Bn2shOhBq+f95mgDfWInkpfBN4aYvx4fTT67Am6cPtohRdwh4Tidtg==
+  dependencies:
+    "@docusaurus/core" "3.8.1"
+    "@docusaurus/module-type-aliases" "3.8.1"
+    "@docusaurus/theme-common" "3.8.1"
+    "@docusaurus/types" "3.8.1"
+    "@docusaurus/utils-validation" "3.8.1"
+    mermaid ">=11.6.0"
+    tslib "^2.6.0"
+
+"@docusaurus/theme-search-algolia@3.8.1":
+  version "3.8.1"
+  resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.8.1.tgz#3aa3d99c35cc2d4b709fcddd4df875a9b536e29b"
+  integrity sha512-NBFH5rZVQRAQM087aYSRKQ9yGEK9eHd+xOxQjqNpxMiV85OhJDD4ZGz6YJIod26Fbooy54UWVdzNU0TFeUUUzQ==
+  dependencies:
+    "@docsearch/react" "^3.9.0"
+    "@docusaurus/core" "3.8.1"
+    "@docusaurus/logger" "3.8.1"
+    "@docusaurus/plugin-content-docs" "3.8.1"
+    "@docusaurus/theme-common" "3.8.1"
+    "@docusaurus/theme-translations" "3.8.1"
+    "@docusaurus/utils" "3.8.1"
+    "@docusaurus/utils-validation" "3.8.1"
+    algoliasearch "^5.17.1"
+    algoliasearch-helper "^3.22.6"
+    clsx "^2.0.0"
+    eta "^2.2.0"
+    fs-extra "^11.1.1"
+    lodash "^4.17.21"
+    tslib "^2.6.0"
+    utility-types "^3.10.0"
+
+"@docusaurus/theme-translations@3.8.1":
+  version "3.8.1"
+  resolved "https://registry.yarnpkg.com/@docusaurus/theme-translations/-/theme-translations-3.8.1.tgz#4b1d76973eb53861e167c7723485e059ba4ffd0a"
+  integrity sha512-OTp6eebuMcf2rJt4bqnvuwmm3NVXfzfYejL+u/Y1qwKhZPrjPoKWfk1CbOP5xH5ZOPkiAsx4dHdQBRJszK3z2g==
+  dependencies:
+    fs-extra "^11.1.1"
+    tslib "^2.6.0"
+
+"@docusaurus/tsconfig@^3.8.0":
+  version "3.8.1"
+  resolved "https://registry.yarnpkg.com/@docusaurus/tsconfig/-/tsconfig-3.8.1.tgz#a1f7daadfc93455289200647f4ee10cdca540f7b"
+  integrity sha512-XBWCcqhRHhkhfolnSolNL+N7gj3HVE3CoZVqnVjfsMzCoOsuQw2iCLxVVHtO+rePUUfouVZHURDgmqIySsF66A==
+
+"@docusaurus/types@3.8.1", "@docusaurus/types@^3.8.0":
+  version "3.8.1"
+  resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-3.8.1.tgz#83ab66c345464e003b576a49f78897482061fc26"
+  integrity sha512-ZPdW5AB+pBjiVrcLuw3dOS6BFlrG0XkS2lDGsj8TizcnREQg3J8cjsgfDviszOk4CweNfwo1AEELJkYaMUuOPg==
+  dependencies:
+    "@mdx-js/mdx" "^3.0.0"
+    "@types/history" "^4.7.11"
+    "@types/react" "*"
+    commander "^5.1.0"
+    joi "^17.9.2"
+    react-helmet-async "npm:@slorber/react-helmet-async@1.3.0"
+    utility-types "^3.10.0"
+    webpack "^5.95.0"
+    webpack-merge "^5.9.0"
+
+"@docusaurus/utils-common@3.8.1":
+  version "3.8.1"
+  resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-3.8.1.tgz#c369b8c3041afb7dcd595d4172beb1cc1015c85f"
+  integrity sha512-zTZiDlvpvoJIrQEEd71c154DkcriBecm4z94OzEE9kz7ikS3J+iSlABhFXM45mZ0eN5pVqqr7cs60+ZlYLewtg==
+  dependencies:
+    "@docusaurus/types" "3.8.1"
+    tslib "^2.6.0"
+
+"@docusaurus/utils-validation@3.8.1":
+  version "3.8.1"
+  resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-3.8.1.tgz#0499c0d151a4098a0963237057993282cfbd538e"
+  integrity sha512-gs5bXIccxzEbyVecvxg6upTwaUbfa0KMmTj7HhHzc016AGyxH2o73k1/aOD0IFrdCsfJNt37MqNI47s2MgRZMA==
+  dependencies:
+    "@docusaurus/logger" "3.8.1"
+    "@docusaurus/utils" "3.8.1"
+    "@docusaurus/utils-common" "3.8.1"
+    fs-extra "^11.2.0"
+    joi "^17.9.2"
+    js-yaml "^4.1.0"
+    lodash "^4.17.21"
+    tslib "^2.6.0"
+
+"@docusaurus/utils@3.8.1":
+  version "3.8.1"
+  resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-3.8.1.tgz#2ac1e734106e2f73dbd0f6a8824d525f9064e9f0"
+  integrity sha512-P1ml0nvOmEFdmu0smSXOqTS1sxU5tqvnc0dA4MTKV39kye+bhQnjkIKEE18fNOvxjyB86k8esoCIFM3x4RykOQ==
+  dependencies:
+    "@docusaurus/logger" "3.8.1"
+    "@docusaurus/types" "3.8.1"
+    "@docusaurus/utils-common" "3.8.1"
+    escape-string-regexp "^4.0.0"
+    execa "5.1.1"
+    file-loader "^6.2.0"
+    fs-extra "^11.1.1"
+    github-slugger "^1.5.0"
+    globby "^11.1.0"
+    gray-matter "^4.0.3"
+    jiti "^1.20.0"
+    js-yaml "^4.1.0"
+    lodash "^4.17.21"
+    micromatch "^4.0.5"
+    p-queue "^6.6.2"
+    prompts "^2.4.2"
+    resolve-pathname "^3.0.0"
+    tslib "^2.6.0"
+    url-loader "^4.1.1"
+    utility-types "^3.10.0"
+    webpack "^5.88.1"
+
+"@hapi/hoek@^9.0.0", "@hapi/hoek@^9.3.0":
+  version "9.3.0"
+  resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb"
+  integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==
+
+"@hapi/topo@^5.1.0":
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012"
+  integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==
+  dependencies:
+    "@hapi/hoek" "^9.0.0"
+
+"@iconify/types@^2.0.0":
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/@iconify/types/-/types-2.0.0.tgz#ab0e9ea681d6c8a1214f30cd741fe3a20cc57f57"
+  integrity sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==
+
+"@iconify/utils@^2.1.33":
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/@iconify/utils/-/utils-2.3.0.tgz#1bbbf8c477ebe9a7cacaea78b1b7e8937f9cbfba"
+  integrity sha512-GmQ78prtwYW6EtzXRU1rY+KwOKfz32PD7iJh6Iyqw68GiKuoZ2A6pRtzWONz5VQJbp50mEjXh/7NkumtrAgRKA==
+  dependencies:
+    "@antfu/install-pkg" "^1.0.0"
+    "@antfu/utils" "^8.1.0"
+    "@iconify/types" "^2.0.0"
+    debug "^4.4.0"
+    globals "^15.14.0"
+    kolorist "^1.8.0"
+    local-pkg "^1.0.0"
+    mlly "^1.7.4"
+
+"@isaacs/cliui@^8.0.2":
+  version "8.0.2"
+  resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550"
+  integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==
+  dependencies:
+    string-width "^5.1.2"
+    string-width-cjs "npm:string-width@^4.2.0"
+    strip-ansi "^7.0.1"
+    strip-ansi-cjs "npm:strip-ansi@^6.0.1"
+    wrap-ansi "^8.1.0"
+    wrap-ansi-cjs "npm:wrap-ansi@^7.0.0"
+
+"@jest/schemas@^29.6.3":
+  version "29.6.3"
+  resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03"
+  integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==
+  dependencies:
+    "@sinclair/typebox" "^0.27.8"
+
+"@jest/types@^29.6.3":
+  version "29.6.3"
+  resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59"
+  integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==
+  dependencies:
+    "@jest/schemas" "^29.6.3"
+    "@types/istanbul-lib-coverage" "^2.0.0"
+    "@types/istanbul-reports" "^3.0.0"
+    "@types/node" "*"
+    "@types/yargs" "^17.0.8"
+    chalk "^4.0.0"
+
+"@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5":
+  version "0.3.8"
+  resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz#4f0e06362e01362f823d348f1872b08f666d8142"
+  integrity sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==
+  dependencies:
+    "@jridgewell/set-array" "^1.2.1"
+    "@jridgewell/sourcemap-codec" "^1.4.10"
+    "@jridgewell/trace-mapping" "^0.3.24"
+
+"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0":
+  version "3.1.2"
+  resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6"
+  integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==
+
+"@jridgewell/set-array@^1.2.1":
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280"
+  integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==
+
+"@jridgewell/source-map@^0.3.3":
+  version "0.3.6"
+  resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.6.tgz#9d71ca886e32502eb9362c9a74a46787c36df81a"
+  integrity sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==
+  dependencies:
+    "@jridgewell/gen-mapping" "^0.3.5"
+    "@jridgewell/trace-mapping" "^0.3.25"
+
+"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14":
+  version "1.5.0"
+  resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a"
+  integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==
+
+"@jridgewell/trace-mapping@0.3.9":
+  version "0.3.9"
+  resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9"
+  integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==
+  dependencies:
+    "@jridgewell/resolve-uri" "^3.0.3"
+    "@jridgewell/sourcemap-codec" "^1.4.10"
+
+"@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25":
+  version "0.3.25"
+  resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0"
+  integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==
+  dependencies:
+    "@jridgewell/resolve-uri" "^3.1.0"
+    "@jridgewell/sourcemap-codec" "^1.4.14"
+
+"@jsonjoy.com/base64@^1.1.1":
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/@jsonjoy.com/base64/-/base64-1.1.2.tgz#cf8ea9dcb849b81c95f14fc0aaa151c6b54d2578"
+  integrity sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==
+
+"@jsonjoy.com/json-pack@^1.0.3":
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/@jsonjoy.com/json-pack/-/json-pack-1.2.0.tgz#e658900e81d194903171c42546e1aa27f446846a"
+  integrity sha512-io1zEbbYcElht3tdlqEOFxZ0dMTYrHz9iMf0gqn1pPjZFTCgM5R4R5IMA20Chb2UPYYsxjzs8CgZ7Nb5n2K2rA==
+  dependencies:
+    "@jsonjoy.com/base64" "^1.1.1"
+    "@jsonjoy.com/util" "^1.1.2"
+    hyperdyperid "^1.2.0"
+    thingies "^1.20.0"
+
+"@jsonjoy.com/util@^1.1.2", "@jsonjoy.com/util@^1.3.0":
+  version "1.6.0"
+  resolved "https://registry.yarnpkg.com/@jsonjoy.com/util/-/util-1.6.0.tgz#23991b2fe12cb3a006573d9dc97c768d3ed2c9f1"
+  integrity sha512-sw/RMbehRhN68WRtcKCpQOPfnH6lLP4GJfqzi3iYej8tnzpZUDr6UkZYJjcjjC0FWEJOJbyM3PTIwxucUmDG2A==
+
+"@leichtgewicht/ip-codec@^2.0.1":
+  version "2.0.5"
+  resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz#4fc56c15c580b9adb7dc3c333a134e540b44bfb1"
+  integrity sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==
+
+"@mdx-js/mdx@^3.0.0":
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/@mdx-js/mdx/-/mdx-3.1.0.tgz#10235cab8ad7d356c262e8c21c68df5850a97dc3"
+  integrity sha512-/QxEhPAvGwbQmy1Px8F899L5Uc2KZ6JtXwlCgJmjSTBedwOZkByYcBG4GceIGPXRDsmfxhHazuS+hlOShRLeDw==
+  dependencies:
+    "@types/estree" "^1.0.0"
+    "@types/estree-jsx" "^1.0.0"
+    "@types/hast" "^3.0.0"
+    "@types/mdx" "^2.0.0"
+    collapse-white-space "^2.0.0"
+    devlop "^1.0.0"
+    estree-util-is-identifier-name "^3.0.0"
+    estree-util-scope "^1.0.0"
+    estree-walker "^3.0.0"
+    hast-util-to-jsx-runtime "^2.0.0"
+    markdown-extensions "^2.0.0"
+    recma-build-jsx "^1.0.0"
+    recma-jsx "^1.0.0"
+    recma-stringify "^1.0.0"
+    rehype-recma "^1.0.0"
+    remark-mdx "^3.0.0"
+    remark-parse "^11.0.0"
+    remark-rehype "^11.0.0"
+    source-map "^0.7.0"
+    unified "^11.0.0"
+    unist-util-position-from-estree "^2.0.0"
+    unist-util-stringify-position "^4.0.0"
+    unist-util-visit "^5.0.0"
+    vfile "^6.0.0"
+
+"@mdx-js/react@^3.0.0":
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-3.1.0.tgz#c4522e335b3897b9a845db1dbdd2f966ae8fb0ed"
+  integrity sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ==
+  dependencies:
+    "@types/mdx" "^2.0.0"
+
+"@mermaid-js/parser@^0.5.0":
+  version "0.5.0"
+  resolved "https://registry.yarnpkg.com/@mermaid-js/parser/-/parser-0.5.0.tgz#63d676e930b0cfd6abfeadee46fb228761438ce6"
+  integrity sha512-AiaN7+VjXC+3BYE+GwNezkpjIcCI2qIMB/K4S2/vMWe0q/XJCBbx5+K7iteuz7VyltX9iAK4FmVTvGc9kjOV4w==
+  dependencies:
+    langium "3.3.1"
+
+"@nodelib/fs.scandir@2.1.5":
+  version "2.1.5"
+  resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
+  integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
+  dependencies:
+    "@nodelib/fs.stat" "2.0.5"
+    run-parallel "^1.1.9"
+
+"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
+  version "2.0.5"
+  resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
+  integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
+
+"@nodelib/fs.walk@^1.2.3":
+  version "1.2.8"
+  resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
+  integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
+  dependencies:
+    "@nodelib/fs.scandir" "2.1.5"
+    fastq "^1.6.0"
+
+"@parcel/watcher-android-arm64@2.5.1":
+  version "2.5.1"
+  resolved "https://registry.yarnpkg.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz#507f836d7e2042f798c7d07ad19c3546f9848ac1"
+  integrity sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==
+
+"@parcel/watcher-darwin-arm64@2.5.1":
+  version "2.5.1"
+  resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz#3d26dce38de6590ef79c47ec2c55793c06ad4f67"
+  integrity sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==
+
+"@parcel/watcher-darwin-x64@2.5.1":
+  version "2.5.1"
+  resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz#99f3af3869069ccf774e4ddfccf7e64fd2311ef8"
+  integrity sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==
+
+"@parcel/watcher-freebsd-x64@2.5.1":
+  version "2.5.1"
+  resolved "https://registry.yarnpkg.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz#14d6857741a9f51dfe51d5b08b7c8afdbc73ad9b"
+  integrity sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==
+
+"@parcel/watcher-linux-arm-glibc@2.5.1":
+  version "2.5.1"
+  resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz#43c3246d6892381db473bb4f663229ad20b609a1"
+  integrity sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==
+
+"@parcel/watcher-linux-arm-musl@2.5.1":
+  version "2.5.1"
+  resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz#663750f7090bb6278d2210de643eb8a3f780d08e"
+  integrity sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==
+
+"@parcel/watcher-linux-arm64-glibc@2.5.1":
+  version "2.5.1"
+  resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz#ba60e1f56977f7e47cd7e31ad65d15fdcbd07e30"
+  integrity sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==
+
+"@parcel/watcher-linux-arm64-musl@2.5.1":
+  version "2.5.1"
+  resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz#f7fbcdff2f04c526f96eac01f97419a6a99855d2"
+  integrity sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==
+
+"@parcel/watcher-linux-x64-glibc@2.5.1":
+  version "2.5.1"
+  resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz#4d2ea0f633eb1917d83d483392ce6181b6a92e4e"
+  integrity sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==
+
+"@parcel/watcher-linux-x64-musl@2.5.1":
+  version "2.5.1"
+  resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz#277b346b05db54f55657301dd77bdf99d63606ee"
+  integrity sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==
+
+"@parcel/watcher-win32-arm64@2.5.1":
+  version "2.5.1"
+  resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz#7e9e02a26784d47503de1d10e8eab6cceb524243"
+  integrity sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==
+
+"@parcel/watcher-win32-ia32@2.5.1":
+  version "2.5.1"
+  resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz#2d0f94fa59a873cdc584bf7f6b1dc628ddf976e6"
+  integrity sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==
+
+"@parcel/watcher-win32-x64@2.5.1":
+  version "2.5.1"
+  resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz#ae52693259664ba6f2228fa61d7ee44b64ea0947"
+  integrity sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==
+
+"@parcel/watcher@^2.4.1":
+  version "2.5.1"
+  resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.5.1.tgz#342507a9cfaaf172479a882309def1e991fb1200"
+  integrity sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==
+  dependencies:
+    detect-libc "^1.0.3"
+    is-glob "^4.0.3"
+    micromatch "^4.0.5"
+    node-addon-api "^7.0.0"
+  optionalDependencies:
+    "@parcel/watcher-android-arm64" "2.5.1"
+    "@parcel/watcher-darwin-arm64" "2.5.1"
+    "@parcel/watcher-darwin-x64" "2.5.1"
+    "@parcel/watcher-freebsd-x64" "2.5.1"
+    "@parcel/watcher-linux-arm-glibc" "2.5.1"
+    "@parcel/watcher-linux-arm-musl" "2.5.1"
+    "@parcel/watcher-linux-arm64-glibc" "2.5.1"
+    "@parcel/watcher-linux-arm64-musl" "2.5.1"
+    "@parcel/watcher-linux-x64-glibc" "2.5.1"
+    "@parcel/watcher-linux-x64-musl" "2.5.1"
+    "@parcel/watcher-win32-arm64" "2.5.1"
+    "@parcel/watcher-win32-ia32" "2.5.1"
+    "@parcel/watcher-win32-x64" "2.5.1"
+
+"@pkgjs/parseargs@^0.11.0":
+  version "0.11.0"
+  resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33"
+  integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==
+
+"@pnpm/config.env-replace@^1.1.0":
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz#ab29da53df41e8948a00f2433f085f54de8b3a4c"
+  integrity sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==
+
+"@pnpm/network.ca-file@^1.0.1":
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz#2ab05e09c1af0cdf2fcf5035bea1484e222f7983"
+  integrity sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==
+  dependencies:
+    graceful-fs "4.2.10"
+
+"@pnpm/npm-conf@^2.1.0":
+  version "2.3.1"
+  resolved "https://registry.yarnpkg.com/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz#bb375a571a0bd63ab0a23bece33033c683e9b6b0"
+  integrity sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==
+  dependencies:
+    "@pnpm/config.env-replace" "^1.1.0"
+    "@pnpm/network.ca-file" "^1.0.1"
+    config-chain "^1.1.11"
+
+"@polka/url@^1.0.0-next.24":
+  version "1.0.0-next.29"
+  resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.29.tgz#5a40109a1ab5f84d6fd8fc928b19f367cbe7e7b1"
+  integrity sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==
+
+"@sideway/address@^4.1.5":
+  version "4.1.5"
+  resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.5.tgz#4bc149a0076623ced99ca8208ba780d65a99b9d5"
+  integrity sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==
+  dependencies:
+    "@hapi/hoek" "^9.0.0"
+
+"@sideway/formula@^3.0.1":
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.1.tgz#80fcbcbaf7ce031e0ef2dd29b1bfc7c3f583611f"
+  integrity sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==
+
+"@sideway/pinpoint@^2.0.0":
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df"
+  integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==
+
+"@sinclair/typebox@^0.27.8":
+  version "0.27.8"
+  resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e"
+  integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==
+
+"@sindresorhus/is@^4.6.0":
+  version "4.6.0"
+  resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f"
+  integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==
+
+"@sindresorhus/is@^5.2.0":
+  version "5.6.0"
+  resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-5.6.0.tgz#41dd6093d34652cddb5d5bdeee04eafc33826668"
+  integrity sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==
+
+"@slorber/remark-comment@^1.0.0":
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/@slorber/remark-comment/-/remark-comment-1.0.0.tgz#2a020b3f4579c89dec0361673206c28d67e08f5a"
+  integrity sha512-RCE24n7jsOj1M0UPvIQCHTe7fI0sFL4S2nwKVWwHyVr/wI/H8GosgsJGyhnsZoGFnD/P2hLf1mSbrrgSLN93NA==
+  dependencies:
+    micromark-factory-space "^1.0.0"
+    micromark-util-character "^1.1.0"
+    micromark-util-symbol "^1.0.1"
+
+"@svgr/babel-plugin-add-jsx-attribute@8.0.0":
+  version "8.0.0"
+  resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz#4001f5d5dd87fa13303e36ee106e3ff3a7eb8b22"
+  integrity sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==
+
+"@svgr/babel-plugin-remove-jsx-attribute@8.0.0":
+  version "8.0.0"
+  resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz#69177f7937233caca3a1afb051906698f2f59186"
+  integrity sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==
+
+"@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0":
+  version "8.0.0"
+  resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz#c2c48104cfd7dcd557f373b70a56e9e3bdae1d44"
+  integrity sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==
+
+"@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0":
+  version "8.0.0"
+  resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz#8fbb6b2e91fa26ac5d4aa25c6b6e4f20f9c0ae27"
+  integrity sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==
+
+"@svgr/babel-plugin-svg-dynamic-title@8.0.0":
+  version "8.0.0"
+  resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz#1d5ba1d281363fc0f2f29a60d6d936f9bbc657b0"
+  integrity sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==
+
+"@svgr/babel-plugin-svg-em-dimensions@8.0.0":
+  version "8.0.0"
+  resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz#35e08df300ea8b1d41cb8f62309c241b0369e501"
+  integrity sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==
+
+"@svgr/babel-plugin-transform-react-native-svg@8.1.0":
+  version "8.1.0"
+  resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz#90a8b63998b688b284f255c6a5248abd5b28d754"
+  integrity sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==
+
+"@svgr/babel-plugin-transform-svg-component@8.0.0":
+  version "8.0.0"
+  resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz#013b4bfca88779711f0ed2739f3f7efcefcf4f7e"
+  integrity sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==
+
+"@svgr/babel-preset@8.1.0":
+  version "8.1.0"
+  resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-8.1.0.tgz#0e87119aecdf1c424840b9d4565b7137cabf9ece"
+  integrity sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==
+  dependencies:
+    "@svgr/babel-plugin-add-jsx-attribute" "8.0.0"
+    "@svgr/babel-plugin-remove-jsx-attribute" "8.0.0"
+    "@svgr/babel-plugin-remove-jsx-empty-expression" "8.0.0"
+    "@svgr/babel-plugin-replace-jsx-attribute-value" "8.0.0"
+    "@svgr/babel-plugin-svg-dynamic-title" "8.0.0"
+    "@svgr/babel-plugin-svg-em-dimensions" "8.0.0"
+    "@svgr/babel-plugin-transform-react-native-svg" "8.1.0"
+    "@svgr/babel-plugin-transform-svg-component" "8.0.0"
+
+"@svgr/core@8.1.0":
+  version "8.1.0"
+  resolved "https://registry.yarnpkg.com/@svgr/core/-/core-8.1.0.tgz#41146f9b40b1a10beaf5cc4f361a16a3c1885e88"
+  integrity sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==
+  dependencies:
+    "@babel/core" "^7.21.3"
+    "@svgr/babel-preset" "8.1.0"
+    camelcase "^6.2.0"
+    cosmiconfig "^8.1.3"
+    snake-case "^3.0.4"
+
+"@svgr/hast-util-to-babel-ast@8.0.0":
+  version "8.0.0"
+  resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz#6952fd9ce0f470e1aded293b792a2705faf4ffd4"
+  integrity sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==
+  dependencies:
+    "@babel/types" "^7.21.3"
+    entities "^4.4.0"
+
+"@svgr/plugin-jsx@8.1.0":
+  version "8.1.0"
+  resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz#96969f04a24b58b174ee4cd974c60475acbd6928"
+  integrity sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==
+  dependencies:
+    "@babel/core" "^7.21.3"
+    "@svgr/babel-preset" "8.1.0"
+    "@svgr/hast-util-to-babel-ast" "8.0.0"
+    svg-parser "^2.0.4"
+
+"@svgr/plugin-svgo@8.1.0":
+  version "8.1.0"
+  resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-8.1.0.tgz#b115b7b967b564f89ac58feae89b88c3decd0f00"
+  integrity sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA==
+  dependencies:
+    cosmiconfig "^8.1.3"
+    deepmerge "^4.3.1"
+    svgo "^3.0.2"
+
+"@svgr/webpack@^8.1.0":
+  version "8.1.0"
+  resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-8.1.0.tgz#16f1b5346f102f89fda6ec7338b96a701d8be0c2"
+  integrity sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA==
+  dependencies:
+    "@babel/core" "^7.21.3"
+    "@babel/plugin-transform-react-constant-elements" "^7.21.3"
+    "@babel/preset-env" "^7.20.2"
+    "@babel/preset-react" "^7.18.6"
+    "@babel/preset-typescript" "^7.21.0"
+    "@svgr/core" "8.1.0"
+    "@svgr/plugin-jsx" "8.1.0"
+    "@svgr/plugin-svgo" "8.1.0"
+
+"@szmarczak/http-timer@^5.0.1":
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-5.0.1.tgz#c7c1bf1141cdd4751b0399c8fc7b8b664cd5be3a"
+  integrity sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==
+  dependencies:
+    defer-to-connect "^2.0.1"
+
+"@trysound/sax@0.2.0":
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad"
+  integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==
+
+"@tsconfig/node10@^1.0.7":
+  version "1.0.11"
+  resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2"
+  integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==
+
+"@tsconfig/node12@^1.0.7":
+  version "1.0.11"
+  resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d"
+  integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==
+
+"@tsconfig/node14@^1.0.0":
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1"
+  integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==
+
+"@tsconfig/node16@^1.0.2":
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9"
+  integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==
+
+"@types/body-parser@*":
+  version "1.19.6"
+  resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.6.tgz#1859bebb8fd7dac9918a45d54c1971ab8b5af474"
+  integrity sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==
+  dependencies:
+    "@types/connect" "*"
+    "@types/node" "*"
+
+"@types/bonjour@^3.5.13":
+  version "3.5.13"
+  resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.13.tgz#adf90ce1a105e81dd1f9c61fdc5afda1bfb92956"
+  integrity sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==
+  dependencies:
+    "@types/node" "*"
+
+"@types/connect-history-api-fallback@^1.5.4":
+  version "1.5.4"
+  resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz#7de71645a103056b48ac3ce07b3520b819c1d5b3"
+  integrity sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==
+  dependencies:
+    "@types/express-serve-static-core" "*"
+    "@types/node" "*"
+
+"@types/connect@*":
+  version "3.4.38"
+  resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858"
+  integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==
+  dependencies:
+    "@types/node" "*"
+
+"@types/d3-array@*":
+  version "3.2.1"
+  resolved "https://registry.yarnpkg.com/@types/d3-array/-/d3-array-3.2.1.tgz#1f6658e3d2006c4fceac53fde464166859f8b8c5"
+  integrity sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==
+
+"@types/d3-axis@*":
+  version "3.0.6"
+  resolved "https://registry.yarnpkg.com/@types/d3-axis/-/d3-axis-3.0.6.tgz#e760e5765b8188b1defa32bc8bb6062f81e4c795"
+  integrity sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==
+  dependencies:
+    "@types/d3-selection" "*"
+
+"@types/d3-brush@*":
+  version "3.0.6"
+  resolved "https://registry.yarnpkg.com/@types/d3-brush/-/d3-brush-3.0.6.tgz#c2f4362b045d472e1b186cdbec329ba52bdaee6c"
+  integrity sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==
+  dependencies:
+    "@types/d3-selection" "*"
+
+"@types/d3-chord@*":
+  version "3.0.6"
+  resolved "https://registry.yarnpkg.com/@types/d3-chord/-/d3-chord-3.0.6.tgz#1706ca40cf7ea59a0add8f4456efff8f8775793d"
+  integrity sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==
+
+"@types/d3-color@*":
+  version "3.1.3"
+  resolved "https://registry.yarnpkg.com/@types/d3-color/-/d3-color-3.1.3.tgz#368c961a18de721da8200e80bf3943fb53136af2"
+  integrity sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==
+
+"@types/d3-contour@*":
+  version "3.0.6"
+  resolved "https://registry.yarnpkg.com/@types/d3-contour/-/d3-contour-3.0.6.tgz#9ada3fa9c4d00e3a5093fed0356c7ab929604231"
+  integrity sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==
+  dependencies:
+    "@types/d3-array" "*"
+    "@types/geojson" "*"
+
+"@types/d3-delaunay@*":
+  version "6.0.4"
+  resolved "https://registry.yarnpkg.com/@types/d3-delaunay/-/d3-delaunay-6.0.4.tgz#185c1a80cc807fdda2a3fe960f7c11c4a27952e1"
+  integrity sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==
+
+"@types/d3-dispatch@*":
+  version "3.0.6"
+  resolved "https://registry.yarnpkg.com/@types/d3-dispatch/-/d3-dispatch-3.0.6.tgz#096efdf55eb97480e3f5621ff9a8da552f0961e7"
+  integrity sha512-4fvZhzMeeuBJYZXRXrRIQnvUYfyXwYmLsdiN7XXmVNQKKw1cM8a5WdID0g1hVFZDqT9ZqZEY5pD44p24VS7iZQ==
+
+"@types/d3-drag@*":
+  version "3.0.7"
+  resolved "https://registry.yarnpkg.com/@types/d3-drag/-/d3-drag-3.0.7.tgz#b13aba8b2442b4068c9a9e6d1d82f8bcea77fc02"
+  integrity sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==
+  dependencies:
+    "@types/d3-selection" "*"
+
+"@types/d3-dsv@*":
+  version "3.0.7"
+  resolved "https://registry.yarnpkg.com/@types/d3-dsv/-/d3-dsv-3.0.7.tgz#0a351f996dc99b37f4fa58b492c2d1c04e3dac17"
+  integrity sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==
+
+"@types/d3-ease@*":
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/@types/d3-ease/-/d3-ease-3.0.2.tgz#e28db1bfbfa617076f7770dd1d9a48eaa3b6c51b"
+  integrity sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==
+
+"@types/d3-fetch@*":
+  version "3.0.7"
+  resolved "https://registry.yarnpkg.com/@types/d3-fetch/-/d3-fetch-3.0.7.tgz#c04a2b4f23181aa376f30af0283dbc7b3b569980"
+  integrity sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==
+  dependencies:
+    "@types/d3-dsv" "*"
+
+"@types/d3-force@*":
+  version "3.0.10"
+  resolved "https://registry.yarnpkg.com/@types/d3-force/-/d3-force-3.0.10.tgz#6dc8fc6e1f35704f3b057090beeeb7ac674bff1a"
+  integrity sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==
+
+"@types/d3-format@*":
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/@types/d3-format/-/d3-format-3.0.4.tgz#b1e4465644ddb3fdf3a263febb240a6cd616de90"
+  integrity sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==
+
+"@types/d3-geo@*":
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/@types/d3-geo/-/d3-geo-3.1.0.tgz#b9e56a079449174f0a2c8684a9a4df3f60522440"
+  integrity sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==
+  dependencies:
+    "@types/geojson" "*"
+
+"@types/d3-hierarchy@*":
+  version "3.1.7"
+  resolved "https://registry.yarnpkg.com/@types/d3-hierarchy/-/d3-hierarchy-3.1.7.tgz#6023fb3b2d463229f2d680f9ac4b47466f71f17b"
+  integrity sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==
+
+"@types/d3-interpolate@*":
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz#412b90e84870285f2ff8a846c6eb60344f12a41c"
+  integrity sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==
+  dependencies:
+    "@types/d3-color" "*"
+
+"@types/d3-path@*":
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/@types/d3-path/-/d3-path-3.1.1.tgz#f632b380c3aca1dba8e34aa049bcd6a4af23df8a"
+  integrity sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==
+
+"@types/d3-polygon@*":
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/@types/d3-polygon/-/d3-polygon-3.0.2.tgz#dfae54a6d35d19e76ac9565bcb32a8e54693189c"
+  integrity sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==
+
+"@types/d3-quadtree@*":
+  version "3.0.6"
+  resolved "https://registry.yarnpkg.com/@types/d3-quadtree/-/d3-quadtree-3.0.6.tgz#d4740b0fe35b1c58b66e1488f4e7ed02952f570f"
+  integrity sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==
+
+"@types/d3-random@*":
+  version "3.0.3"
+  resolved "https://registry.yarnpkg.com/@types/d3-random/-/d3-random-3.0.3.tgz#ed995c71ecb15e0cd31e22d9d5d23942e3300cfb"
+  integrity sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==
+
+"@types/d3-scale-chromatic@*":
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz#dc6d4f9a98376f18ea50bad6c39537f1b5463c39"
+  integrity sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==
+
+"@types/d3-scale@*":
+  version "4.0.9"
+  resolved "https://registry.yarnpkg.com/@types/d3-scale/-/d3-scale-4.0.9.tgz#57a2f707242e6fe1de81ad7bfcccaaf606179afb"
+  integrity sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==
+  dependencies:
+    "@types/d3-time" "*"
+
+"@types/d3-selection@*":
+  version "3.0.11"
+  resolved "https://registry.yarnpkg.com/@types/d3-selection/-/d3-selection-3.0.11.tgz#bd7a45fc0a8c3167a631675e61bc2ca2b058d4a3"
+  integrity sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==
+
+"@types/d3-shape@*":
+  version "3.1.7"
+  resolved "https://registry.yarnpkg.com/@types/d3-shape/-/d3-shape-3.1.7.tgz#2b7b423dc2dfe69c8c93596e673e37443348c555"
+  integrity sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==
+  dependencies:
+    "@types/d3-path" "*"
+
+"@types/d3-time-format@*":
+  version "4.0.3"
+  resolved "https://registry.yarnpkg.com/@types/d3-time-format/-/d3-time-format-4.0.3.tgz#d6bc1e6b6a7db69cccfbbdd4c34b70632d9e9db2"
+  integrity sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==
+
+"@types/d3-time@*":
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/@types/d3-time/-/d3-time-3.0.4.tgz#8472feecd639691450dd8000eb33edd444e1323f"
+  integrity sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==
+
+"@types/d3-timer@*":
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/@types/d3-timer/-/d3-timer-3.0.2.tgz#70bbda77dc23aa727413e22e214afa3f0e852f70"
+  integrity sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==
+
+"@types/d3-transition@*":
+  version "3.0.9"
+  resolved "https://registry.yarnpkg.com/@types/d3-transition/-/d3-transition-3.0.9.tgz#1136bc57e9ddb3c390dccc9b5ff3b7d2b8d94706"
+  integrity sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==
+  dependencies:
+    "@types/d3-selection" "*"
+
+"@types/d3-zoom@*":
+  version "3.0.8"
+  resolved "https://registry.yarnpkg.com/@types/d3-zoom/-/d3-zoom-3.0.8.tgz#dccb32d1c56b1e1c6e0f1180d994896f038bc40b"
+  integrity sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==
+  dependencies:
+    "@types/d3-interpolate" "*"
+    "@types/d3-selection" "*"
+
+"@types/d3@^7.4.3":
+  version "7.4.3"
+  resolved "https://registry.yarnpkg.com/@types/d3/-/d3-7.4.3.tgz#d4550a85d08f4978faf0a4c36b848c61eaac07e2"
+  integrity sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==
+  dependencies:
+    "@types/d3-array" "*"
+    "@types/d3-axis" "*"
+    "@types/d3-brush" "*"
+    "@types/d3-chord" "*"
+    "@types/d3-color" "*"
+    "@types/d3-contour" "*"
+    "@types/d3-delaunay" "*"
+    "@types/d3-dispatch" "*"
+    "@types/d3-drag" "*"
+    "@types/d3-dsv" "*"
+    "@types/d3-ease" "*"
+    "@types/d3-fetch" "*"
+    "@types/d3-force" "*"
+    "@types/d3-format" "*"
+    "@types/d3-geo" "*"
+    "@types/d3-hierarchy" "*"
+    "@types/d3-interpolate" "*"
+    "@types/d3-path" "*"
+    "@types/d3-polygon" "*"
+    "@types/d3-quadtree" "*"
+    "@types/d3-random" "*"
+    "@types/d3-scale" "*"
+    "@types/d3-scale-chromatic" "*"
+    "@types/d3-selection" "*"
+    "@types/d3-shape" "*"
+    "@types/d3-time" "*"
+    "@types/d3-time-format" "*"
+    "@types/d3-timer" "*"
+    "@types/d3-transition" "*"
+    "@types/d3-zoom" "*"
+
+"@types/debug@^4.0.0":
+  version "4.1.12"
+  resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917"
+  integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==
+  dependencies:
+    "@types/ms" "*"
+
+"@types/eslint-scope@^3.7.7":
+  version "3.7.7"
+  resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz#3108bd5f18b0cdb277c867b3dd449c9ed7079ac5"
+  integrity sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==
+  dependencies:
+    "@types/eslint" "*"
+    "@types/estree" "*"
+
+"@types/eslint@*":
+  version "9.6.1"
+  resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-9.6.1.tgz#d5795ad732ce81715f27f75da913004a56751584"
+  integrity sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==
+  dependencies:
+    "@types/estree" "*"
+    "@types/json-schema" "*"
+
+"@types/estree-jsx@^1.0.0":
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/@types/estree-jsx/-/estree-jsx-1.0.5.tgz#858a88ea20f34fe65111f005a689fa1ebf70dc18"
+  integrity sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==
+  dependencies:
+    "@types/estree" "*"
+
+"@types/estree@*", "@types/estree@^1.0.0", "@types/estree@^1.0.6":
+  version "1.0.8"
+  resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e"
+  integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==
+
+"@types/express-serve-static-core@*", "@types/express-serve-static-core@^5.0.0":
+  version "5.0.6"
+  resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz#41fec4ea20e9c7b22f024ab88a95c6bb288f51b8"
+  integrity sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==
+  dependencies:
+    "@types/node" "*"
+    "@types/qs" "*"
+    "@types/range-parser" "*"
+    "@types/send" "*"
+
+"@types/express-serve-static-core@^4.17.21", "@types/express-serve-static-core@^4.17.33":
+  version "4.19.6"
+  resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz#e01324c2a024ff367d92c66f48553ced0ab50267"
+  integrity sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==
+  dependencies:
+    "@types/node" "*"
+    "@types/qs" "*"
+    "@types/range-parser" "*"
+    "@types/send" "*"
+
+"@types/express@*":
+  version "5.0.3"
+  resolved "https://registry.yarnpkg.com/@types/express/-/express-5.0.3.tgz#6c4bc6acddc2e2a587142e1d8be0bce20757e956"
+  integrity sha512-wGA0NX93b19/dZC1J18tKWVIYWyyF2ZjT9vin/NRu0qzzvfVzWjs04iq2rQ3H65vCTQYlRqs3YHfY7zjdV+9Kw==
+  dependencies:
+    "@types/body-parser" "*"
+    "@types/express-serve-static-core" "^5.0.0"
+    "@types/serve-static" "*"
+
+"@types/express@^4.17.21":
+  version "4.17.23"
+  resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.23.tgz#35af3193c640bfd4d7fe77191cd0ed411a433bef"
+  integrity sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==
+  dependencies:
+    "@types/body-parser" "*"
+    "@types/express-serve-static-core" "^4.17.33"
+    "@types/qs" "*"
+    "@types/serve-static" "*"
+
+"@types/geojson@*":
+  version "7946.0.16"
+  resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.16.tgz#8ebe53d69efada7044454e3305c19017d97ced2a"
+  integrity sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==
+
+"@types/gtag.js@^0.0.12":
+  version "0.0.12"
+  resolved "https://registry.yarnpkg.com/@types/gtag.js/-/gtag.js-0.0.12.tgz#095122edca896689bdfcdd73b057e23064d23572"
+  integrity sha512-YQV9bUsemkzG81Ea295/nF/5GijnD2Af7QhEofh7xu+kvCN6RdodgNwwGWXB5GMI3NoyvQo0odNctoH/qLMIpg==
+
+"@types/hast@^3.0.0":
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/@types/hast/-/hast-3.0.4.tgz#1d6b39993b82cea6ad783945b0508c25903e15aa"
+  integrity sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==
+  dependencies:
+    "@types/unist" "*"
+
+"@types/history@^4.7.11":
+  version "4.7.11"
+  resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.11.tgz#56588b17ae8f50c53983a524fc3cc47437969d64"
+  integrity sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==
+
+"@types/html-minifier-terser@^6.0.0":
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35"
+  integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==
+
+"@types/http-cache-semantics@^4.0.2":
+  version "4.0.4"
+  resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4"
+  integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==
+
+"@types/http-errors@*":
+  version "2.0.5"
+  resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.5.tgz#5b749ab2b16ba113423feb1a64a95dcd30398472"
+  integrity sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==
+
+"@types/http-proxy@^1.17.8":
+  version "1.17.16"
+  resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.16.tgz#dee360707b35b3cc85afcde89ffeebff7d7f9240"
+  integrity sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==
+  dependencies:
+    "@types/node" "*"
+
+"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0":
+  version "2.0.6"
+  resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7"
+  integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==
+
+"@types/istanbul-lib-report@*":
+  version "3.0.3"
+  resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf"
+  integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==
+  dependencies:
+    "@types/istanbul-lib-coverage" "*"
+
+"@types/istanbul-reports@^3.0.0":
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54"
+  integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==
+  dependencies:
+    "@types/istanbul-lib-report" "*"
+
+"@types/js-yaml@^4.0.9":
+  version "4.0.9"
+  resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-4.0.9.tgz#cd82382c4f902fed9691a2ed79ec68c5898af4c2"
+  integrity sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==
+
+"@types/json-schema@*", "@types/json-schema@^7.0.15", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9":
+  version "7.0.15"
+  resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841"
+  integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==
+
+"@types/mdast@^4.0.0", "@types/mdast@^4.0.2":
+  version "4.0.4"
+  resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-4.0.4.tgz#7ccf72edd2f1aa7dd3437e180c64373585804dd6"
+  integrity sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==
+  dependencies:
+    "@types/unist" "*"
+
+"@types/mdx@^2.0.0":
+  version "2.0.13"
+  resolved "https://registry.yarnpkg.com/@types/mdx/-/mdx-2.0.13.tgz#68f6877043d377092890ff5b298152b0a21671bd"
+  integrity sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==
+
+"@types/mime@^1":
+  version "1.3.5"
+  resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690"
+  integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==
+
+"@types/ms@*":
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/@types/ms/-/ms-2.1.0.tgz#052aa67a48eccc4309d7f0191b7e41434b90bb78"
+  integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==
+
+"@types/node-forge@^1.3.0":
+  version "1.3.11"
+  resolved "https://registry.yarnpkg.com/@types/node-forge/-/node-forge-1.3.11.tgz#0972ea538ddb0f4d9c2fa0ec5db5724773a604da"
+  integrity sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==
+  dependencies:
+    "@types/node" "*"
+
+"@types/node@*":
+  version "24.0.3"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-24.0.3.tgz#f935910f3eece3a3a2f8be86b96ba833dc286cab"
+  integrity sha512-R4I/kzCYAdRLzfiCabn9hxWfbuHS573x+r0dJMkkzThEa7pbrcDWK+9zu3e7aBOouf+rQAciqPFMnxwr0aWgKg==
+  dependencies:
+    undici-types "~7.8.0"
+
+"@types/node@^17.0.5":
+  version "17.0.45"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190"
+  integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==
+
+"@types/node@^18.0.0":
+  version "18.19.112"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.112.tgz#cd2aee9c075402e0e1942a44101428881dbeb110"
+  integrity sha512-i+Vukt9POdS/MBI7YrrkkI5fMfwFtOjphSmt4WXYLfwqsfr6z/HdCx7LqT9M7JktGob8WNgj8nFB4TbGNE4Cog==
+  dependencies:
+    undici-types "~5.26.4"
+
+"@types/prismjs@^1.26.0":
+  version "1.26.5"
+  resolved "https://registry.yarnpkg.com/@types/prismjs/-/prismjs-1.26.5.tgz#72499abbb4c4ec9982446509d2f14fb8483869d6"
+  integrity sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==
+
+"@types/prop-types@*":
+  version "15.7.15"
+  resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.15.tgz#e6e5a86d602beaca71ce5163fadf5f95d70931c7"
+  integrity sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==
+
+"@types/qs@*":
+  version "6.14.0"
+  resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.14.0.tgz#d8b60cecf62f2db0fb68e5e006077b9178b85de5"
+  integrity sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==
+
+"@types/range-parser@*":
+  version "1.2.7"
+  resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb"
+  integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==
+
+"@types/react-loadable@^5.5.0":
+  version "5.5.11"
+  resolved "https://registry.yarnpkg.com/@types/react-loadable/-/react-loadable-5.5.11.tgz#a9b23334251fbdfb32b94c120a09e301e606f07f"
+  integrity sha512-/tq2IJ853MoIFRBmqVOxnGsRRjER5TmEKzsZtaAkiXAWoDeKgR/QNOT1vd9k0p9h/F616X21cpNh3hu4RutzRQ==
+  dependencies:
+    "@types/react" "*"
+    "@types/webpack" "^4"
+
+"@types/react-router-config@*", "@types/react-router-config@^5.0.7":
+  version "5.0.11"
+  resolved "https://registry.yarnpkg.com/@types/react-router-config/-/react-router-config-5.0.11.tgz#2761a23acc7905a66a94419ee40294a65aaa483a"
+  integrity sha512-WmSAg7WgqW7m4x8Mt4N6ZyKz0BubSj/2tVUMsAHp+Yd2AMwcSbeFq9WympT19p5heCFmF97R9eD5uUR/t4HEqw==
+  dependencies:
+    "@types/history" "^4.7.11"
+    "@types/react" "*"
+    "@types/react-router" "^5.1.0"
+
+"@types/react-router-dom@*":
+  version "5.3.3"
+  resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.3.3.tgz#e9d6b4a66fcdbd651a5f106c2656a30088cc1e83"
+  integrity sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==
+  dependencies:
+    "@types/history" "^4.7.11"
+    "@types/react" "*"
+    "@types/react-router" "*"
+
+"@types/react-router@*", "@types/react-router@^5.1.0":
+  version "5.1.20"
+  resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-5.1.20.tgz#88eccaa122a82405ef3efbcaaa5dcdd9f021387c"
+  integrity sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==
+  dependencies:
+    "@types/history" "^4.7.11"
+    "@types/react" "*"
+
+"@types/react@*":
+  version "19.1.8"
+  resolved "https://registry.yarnpkg.com/@types/react/-/react-19.1.8.tgz#ff8395f2afb764597265ced15f8dddb0720ae1c3"
+  integrity sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==
+  dependencies:
+    csstype "^3.0.2"
+
+"@types/react@^18.0.0":
+  version "18.3.23"
+  resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.23.tgz#86ae6f6b95a48c418fecdaccc8069e0fbb63696a"
+  integrity sha512-/LDXMQh55EzZQ0uVAZmKKhfENivEvWz6E+EYzh+/MCjMhNsotd+ZHhBGIjFDTi6+fz0OhQQQLbTgdQIxxCsC0w==
+  dependencies:
+    "@types/prop-types" "*"
+    csstype "^3.0.2"
+
+"@types/retry@0.12.2":
+  version "0.12.2"
+  resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.2.tgz#ed279a64fa438bb69f2480eda44937912bb7480a"
+  integrity sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==
+
+"@types/sax@^1.2.1":
+  version "1.2.7"
+  resolved "https://registry.yarnpkg.com/@types/sax/-/sax-1.2.7.tgz#ba5fe7df9aa9c89b6dff7688a19023dd2963091d"
+  integrity sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==
+  dependencies:
+    "@types/node" "*"
+
+"@types/send@*":
+  version "0.17.5"
+  resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.5.tgz#d991d4f2b16f2b1ef497131f00a9114290791e74"
+  integrity sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==
+  dependencies:
+    "@types/mime" "^1"
+    "@types/node" "*"
+
+"@types/serve-index@^1.9.4":
+  version "1.9.4"
+  resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.4.tgz#e6ae13d5053cb06ed36392110b4f9a49ac4ec898"
+  integrity sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==
+  dependencies:
+    "@types/express" "*"
+
+"@types/serve-static@*", "@types/serve-static@^1.15.5":
+  version "1.15.8"
+  resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.8.tgz#8180c3fbe4a70e8f00b9f70b9ba7f08f35987877"
+  integrity sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==
+  dependencies:
+    "@types/http-errors" "*"
+    "@types/node" "*"
+    "@types/send" "*"
+
+"@types/sockjs@^0.3.36":
+  version "0.3.36"
+  resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.36.tgz#ce322cf07bcc119d4cbf7f88954f3a3bd0f67535"
+  integrity sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==
+  dependencies:
+    "@types/node" "*"
+
+"@types/source-list-map@*":
+  version "0.1.6"
+  resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.6.tgz#164e169dd061795b50b83c19e4d3be09f8d3a454"
+  integrity sha512-5JcVt1u5HDmlXkwOD2nslZVllBBc7HDuOICfiZah2Z0is8M8g+ddAEawbmd3VjedfDHBzxCaXLs07QEmb7y54g==
+
+"@types/tapable@^1":
+  version "1.0.12"
+  resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.12.tgz#bc2cab12e87978eee89fb21576b670350d6d86ab"
+  integrity sha512-bTHG8fcxEqv1M9+TD14P8ok8hjxoOCkfKc8XXLaaD05kI7ohpeI956jtDOD3XHKBQrlyPughUtzm1jtVhHpA5Q==
+
+"@types/trusted-types@^2.0.7":
+  version "2.0.7"
+  resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.7.tgz#baccb07a970b91707df3a3e8ba6896c57ead2d11"
+  integrity sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==
+
+"@types/uglify-js@*":
+  version "3.17.5"
+  resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.17.5.tgz#905ce03a3cbbf2e31cbefcbc68d15497ee2e17df"
+  integrity sha512-TU+fZFBTBcXj/GpDpDaBmgWk/gn96kMZ+uocaFUlV2f8a6WdMzzI44QBCmGcCiYR0Y6ZlNRiyUyKKt5nl/lbzQ==
+  dependencies:
+    source-map "^0.6.1"
+
+"@types/unist@*", "@types/unist@^3.0.0":
+  version "3.0.3"
+  resolved "https://registry.yarnpkg.com/@types/unist/-/unist-3.0.3.tgz#acaab0f919ce69cce629c2d4ed2eb4adc1b6c20c"
+  integrity sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==
+
+"@types/unist@^2.0.0":
+  version "2.0.11"
+  resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.11.tgz#11af57b127e32487774841f7a4e54eab166d03c4"
+  integrity sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==
+
+"@types/webpack-sources@*":
+  version "3.2.3"
+  resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-3.2.3.tgz#b667bd13e9fa15a9c26603dce502c7985418c3d8"
+  integrity sha512-4nZOdMwSPHZ4pTEZzSp0AsTM4K7Qmu40UKW4tJDiOVs20UzYF9l+qUe4s0ftfN0pin06n+5cWWDJXH+sbhAiDw==
+  dependencies:
+    "@types/node" "*"
+    "@types/source-list-map" "*"
+    source-map "^0.7.3"
+
+"@types/webpack@^4":
+  version "4.41.40"
+  resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.40.tgz#41ea11cfafe08de24c3ef410c58976350667e2d1"
+  integrity sha512-u6kMFSBM9HcoTpUXnL6mt2HSzftqb3JgYV6oxIgL2dl6sX6aCa5k6SOkzv5DuZjBTPUE/dJltKtwwuqrkZHpfw==
+  dependencies:
+    "@types/node" "*"
+    "@types/tapable" "^1"
+    "@types/uglify-js" "*"
+    "@types/webpack-sources" "*"
+    anymatch "^3.0.0"
+    source-map "^0.6.0"
+
+"@types/ws@^8.5.10":
+  version "8.18.1"
+  resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.18.1.tgz#48464e4bf2ddfd17db13d845467f6070ffea4aa9"
+  integrity sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==
+  dependencies:
+    "@types/node" "*"
+
+"@types/yargs-parser@*":
+  version "21.0.3"
+  resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15"
+  integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==
+
+"@types/yargs@^17.0.8":
+  version "17.0.33"
+  resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.33.tgz#8c32303da83eec050a84b3c7ae7b9f922d13e32d"
+  integrity sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==
+  dependencies:
+    "@types/yargs-parser" "*"
+
+"@uidotdev/usehooks@^2.4.1":
+  version "2.4.1"
+  resolved "https://registry.yarnpkg.com/@uidotdev/usehooks/-/usehooks-2.4.1.tgz#4b733eaeae09a7be143c6c9ca158b56cc1ea75bf"
+  integrity sha512-1I+RwWyS+kdv3Mv0Vmc+p0dPYH0DTRAo04HLyXReYBL9AeseDWUJyi4THuksBJcu9F0Pih69Ak150VDnqbVnXg==
+
+"@ungap/structured-clone@^1.0.0":
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.3.0.tgz#d06bbb384ebcf6c505fde1c3d0ed4ddffe0aaff8"
+  integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==
+
+"@webassemblyjs/ast@1.14.1", "@webassemblyjs/ast@^1.14.1":
+  version "1.14.1"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.14.1.tgz#a9f6a07f2b03c95c8d38c4536a1fdfb521ff55b6"
+  integrity sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==
+  dependencies:
+    "@webassemblyjs/helper-numbers" "1.13.2"
+    "@webassemblyjs/helper-wasm-bytecode" "1.13.2"
+
+"@webassemblyjs/floating-point-hex-parser@1.13.2":
+  version "1.13.2"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz#fcca1eeddb1cc4e7b6eed4fc7956d6813b21b9fb"
+  integrity sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==
+
+"@webassemblyjs/helper-api-error@1.13.2":
+  version "1.13.2"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz#e0a16152248bc38daee76dd7e21f15c5ef3ab1e7"
+  integrity sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==
+
+"@webassemblyjs/helper-buffer@1.14.1":
+  version "1.14.1"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz#822a9bc603166531f7d5df84e67b5bf99b72b96b"
+  integrity sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==
+
+"@webassemblyjs/helper-numbers@1.13.2":
+  version "1.13.2"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz#dbd932548e7119f4b8a7877fd5a8d20e63490b2d"
+  integrity sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==
+  dependencies:
+    "@webassemblyjs/floating-point-hex-parser" "1.13.2"
+    "@webassemblyjs/helper-api-error" "1.13.2"
+    "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/helper-wasm-bytecode@1.13.2":
+  version "1.13.2"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz#e556108758f448aae84c850e593ce18a0eb31e0b"
+  integrity sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==
+
+"@webassemblyjs/helper-wasm-section@1.14.1":
+  version "1.14.1"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz#9629dda9c4430eab54b591053d6dc6f3ba050348"
+  integrity sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==
+  dependencies:
+    "@webassemblyjs/ast" "1.14.1"
+    "@webassemblyjs/helper-buffer" "1.14.1"
+    "@webassemblyjs/helper-wasm-bytecode" "1.13.2"
+    "@webassemblyjs/wasm-gen" "1.14.1"
+
+"@webassemblyjs/ieee754@1.13.2":
+  version "1.13.2"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz#1c5eaace1d606ada2c7fd7045ea9356c59ee0dba"
+  integrity sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==
+  dependencies:
+    "@xtuc/ieee754" "^1.2.0"
+
+"@webassemblyjs/leb128@1.13.2":
+  version "1.13.2"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.13.2.tgz#57c5c3deb0105d02ce25fa3fd74f4ebc9fd0bbb0"
+  integrity sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==
+  dependencies:
+    "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/utf8@1.13.2":
+  version "1.13.2"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.13.2.tgz#917a20e93f71ad5602966c2d685ae0c6c21f60f1"
+  integrity sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==
+
+"@webassemblyjs/wasm-edit@^1.14.1":
+  version "1.14.1"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz#ac6689f502219b59198ddec42dcd496b1004d597"
+  integrity sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==
+  dependencies:
+    "@webassemblyjs/ast" "1.14.1"
+    "@webassemblyjs/helper-buffer" "1.14.1"
+    "@webassemblyjs/helper-wasm-bytecode" "1.13.2"
+    "@webassemblyjs/helper-wasm-section" "1.14.1"
+    "@webassemblyjs/wasm-gen" "1.14.1"
+    "@webassemblyjs/wasm-opt" "1.14.1"
+    "@webassemblyjs/wasm-parser" "1.14.1"
+    "@webassemblyjs/wast-printer" "1.14.1"
+
+"@webassemblyjs/wasm-gen@1.14.1":
+  version "1.14.1"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz#991e7f0c090cb0bb62bbac882076e3d219da9570"
+  integrity sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==
+  dependencies:
+    "@webassemblyjs/ast" "1.14.1"
+    "@webassemblyjs/helper-wasm-bytecode" "1.13.2"
+    "@webassemblyjs/ieee754" "1.13.2"
+    "@webassemblyjs/leb128" "1.13.2"
+    "@webassemblyjs/utf8" "1.13.2"
+
+"@webassemblyjs/wasm-opt@1.14.1":
+  version "1.14.1"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz#e6f71ed7ccae46781c206017d3c14c50efa8106b"
+  integrity sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==
+  dependencies:
+    "@webassemblyjs/ast" "1.14.1"
+    "@webassemblyjs/helper-buffer" "1.14.1"
+    "@webassemblyjs/wasm-gen" "1.14.1"
+    "@webassemblyjs/wasm-parser" "1.14.1"
+
+"@webassemblyjs/wasm-parser@1.14.1", "@webassemblyjs/wasm-parser@^1.14.1":
+  version "1.14.1"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz#b3e13f1893605ca78b52c68e54cf6a865f90b9fb"
+  integrity sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==
+  dependencies:
+    "@webassemblyjs/ast" "1.14.1"
+    "@webassemblyjs/helper-api-error" "1.13.2"
+    "@webassemblyjs/helper-wasm-bytecode" "1.13.2"
+    "@webassemblyjs/ieee754" "1.13.2"
+    "@webassemblyjs/leb128" "1.13.2"
+    "@webassemblyjs/utf8" "1.13.2"
+
+"@webassemblyjs/wast-printer@1.14.1":
+  version "1.14.1"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz#3bb3e9638a8ae5fdaf9610e7a06b4d9f9aa6fe07"
+  integrity sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==
+  dependencies:
+    "@webassemblyjs/ast" "1.14.1"
+    "@xtuc/long" "4.2.2"
+
+"@xtuc/ieee754@^1.2.0":
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790"
+  integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==
+
+"@xtuc/long@4.2.2":
+  version "4.2.2"
+  resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
+  integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
+
+accepts@~1.3.4, accepts@~1.3.8:
+  version "1.3.8"
+  resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e"
+  integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==
+  dependencies:
+    mime-types "~2.1.34"
+    negotiator "0.6.3"
+
+acorn-jsx@^5.0.0:
+  version "5.3.2"
+  resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
+  integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
+
+acorn-walk@^8.0.0, acorn-walk@^8.1.1:
+  version "8.3.4"
+  resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.4.tgz#794dd169c3977edf4ba4ea47583587c5866236b7"
+  integrity sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==
+  dependencies:
+    acorn "^8.11.0"
+
+acorn@^8.0.0, acorn@^8.0.4, acorn@^8.11.0, acorn@^8.14.0, acorn@^8.4.1:
+  version "8.15.0"
+  resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816"
+  integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==
+
+address@^1.0.1:
+  version "1.2.2"
+  resolved "https://registry.yarnpkg.com/address/-/address-1.2.2.tgz#2b5248dac5485a6390532c6a517fda2e3faac89e"
+  integrity sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==
+
+aggregate-error@^3.0.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a"
+  integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==
+  dependencies:
+    clean-stack "^2.0.0"
+    indent-string "^4.0.0"
+
+ajv-formats@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520"
+  integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==
+  dependencies:
+    ajv "^8.0.0"
+
+ajv-keywords@^3.5.2:
+  version "3.5.2"
+  resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
+  integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
+
+ajv-keywords@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16"
+  integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==
+  dependencies:
+    fast-deep-equal "^3.1.3"
+
+ajv@^6.12.5:
+  version "6.12.6"
+  resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
+  integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
+  dependencies:
+    fast-deep-equal "^3.1.1"
+    fast-json-stable-stringify "^2.0.0"
+    json-schema-traverse "^0.4.1"
+    uri-js "^4.2.2"
+
+ajv@^8.0.0, ajv@^8.9.0:
+  version "8.17.1"
+  resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6"
+  integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==
+  dependencies:
+    fast-deep-equal "^3.1.3"
+    fast-uri "^3.0.1"
+    json-schema-traverse "^1.0.0"
+    require-from-string "^2.0.2"
+
+algoliasearch-helper@^3.22.6:
+  version "3.26.0"
+  resolved "https://registry.yarnpkg.com/algoliasearch-helper/-/algoliasearch-helper-3.26.0.tgz#d6e283396a9fc5bf944f365dc3b712570314363f"
+  integrity sha512-Rv2x3GXleQ3ygwhkhJubhhYGsICmShLAiqtUuJTUkr9uOCOXyF2E71LVT4XDnVffbknv8XgScP4U0Oxtgm+hIw==
+  dependencies:
+    "@algolia/events" "^4.0.1"
+
+algoliasearch@^5.14.2, algoliasearch@^5.17.1:
+  version "5.29.0"
+  resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-5.29.0.tgz#0feae8e0a71fced857be4e97c434ef9dce89783b"
+  integrity sha512-E2l6AlTWGznM2e7vEE6T6hzObvEyXukxMOlBmVlMyixZyK1umuO/CiVc6sDBbzVH0oEviCE5IfVY1oZBmccYPQ==
+  dependencies:
+    "@algolia/client-abtesting" "5.29.0"
+    "@algolia/client-analytics" "5.29.0"
+    "@algolia/client-common" "5.29.0"
+    "@algolia/client-insights" "5.29.0"
+    "@algolia/client-personalization" "5.29.0"
+    "@algolia/client-query-suggestions" "5.29.0"
+    "@algolia/client-search" "5.29.0"
+    "@algolia/ingestion" "1.29.0"
+    "@algolia/monitoring" "1.29.0"
+    "@algolia/recommend" "5.29.0"
+    "@algolia/requester-browser-xhr" "5.29.0"
+    "@algolia/requester-fetch" "5.29.0"
+    "@algolia/requester-node-http" "5.29.0"
+
+ansi-align@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59"
+  integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==
+  dependencies:
+    string-width "^4.1.0"
+
+ansi-escapes@^4.3.2:
+  version "4.3.2"
+  resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e"
+  integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==
+  dependencies:
+    type-fest "^0.21.3"
+
+ansi-html-community@^0.0.8:
+  version "0.0.8"
+  resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41"
+  integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==
+
+ansi-regex@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
+  integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
+
+ansi-regex@^6.0.1:
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654"
+  integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==
+
+ansi-styles@^4.0.0, ansi-styles@^4.1.0:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
+  integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
+  dependencies:
+    color-convert "^2.0.1"
+
+ansi-styles@^6.1.0:
+  version "6.2.1"
+  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5"
+  integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==
+
+any-promise@^1.0.0:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
+  integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==
+
+anymatch@^3.0.0, anymatch@~3.1.2:
+  version "3.1.3"
+  resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
+  integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==
+  dependencies:
+    normalize-path "^3.0.0"
+    picomatch "^2.0.4"
+
+arg@^4.1.0:
+  version "4.1.3"
+  resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"
+  integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==
+
+arg@^5.0.0, arg@^5.0.2:
+  version "5.0.2"
+  resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c"
+  integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==
+
+argparse@^1.0.7:
+  version "1.0.10"
+  resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
+  integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
+  dependencies:
+    sprintf-js "~1.0.2"
+
+argparse@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
+  integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
+
+array-flatten@1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
+  integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==
+
+array-union@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
+  integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
+
+astring@^1.8.0:
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/astring/-/astring-1.9.0.tgz#cc73e6062a7eb03e7d19c22d8b0b3451fd9bfeef"
+  integrity sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==
+
+asynckit@^0.4.0:
+  version "0.4.0"
+  resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+  integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
+
+autoprefixer@^10.4.19, autoprefixer@^10.4.21:
+  version "10.4.21"
+  resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.21.tgz#77189468e7a8ad1d9a37fbc08efc9f480cf0a95d"
+  integrity sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==
+  dependencies:
+    browserslist "^4.24.4"
+    caniuse-lite "^1.0.30001702"
+    fraction.js "^4.3.7"
+    normalize-range "^0.1.2"
+    picocolors "^1.1.1"
+    postcss-value-parser "^4.2.0"
+
+axios@^1.6.0:
+  version "1.10.0"
+  resolved "https://registry.yarnpkg.com/axios/-/axios-1.10.0.tgz#af320aee8632eaf2a400b6a1979fa75856f38d54"
+  integrity sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==
+  dependencies:
+    follow-redirects "^1.15.6"
+    form-data "^4.0.0"
+    proxy-from-env "^1.1.0"
+
+babel-loader@^9.2.1:
+  version "9.2.1"
+  resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-9.2.1.tgz#04c7835db16c246dd19ba0914418f3937797587b"
+  integrity sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==
+  dependencies:
+    find-cache-dir "^4.0.0"
+    schema-utils "^4.0.0"
+
+babel-plugin-dynamic-import-node@^2.3.3:
+  version "2.3.3"
+  resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3"
+  integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==
+  dependencies:
+    object.assign "^4.1.0"
+
+babel-plugin-polyfill-corejs2@^0.4.10:
+  version "0.4.13"
+  resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.13.tgz#7d445f0e0607ebc8fb6b01d7e8fb02069b91dd8b"
+  integrity sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g==
+  dependencies:
+    "@babel/compat-data" "^7.22.6"
+    "@babel/helper-define-polyfill-provider" "^0.6.4"
+    semver "^6.3.1"
+
+babel-plugin-polyfill-corejs3@^0.11.0:
+  version "0.11.1"
+  resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz#4e4e182f1bb37c7ba62e2af81d8dd09df31344f6"
+  integrity sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==
+  dependencies:
+    "@babel/helper-define-polyfill-provider" "^0.6.3"
+    core-js-compat "^3.40.0"
+
+babel-plugin-polyfill-regenerator@^0.6.1:
+  version "0.6.4"
+  resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.4.tgz#428c615d3c177292a22b4f93ed99e358d7906a9b"
+  integrity sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw==
+  dependencies:
+    "@babel/helper-define-polyfill-provider" "^0.6.4"
+
+bail@^2.0.0:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/bail/-/bail-2.0.2.tgz#d26f5cd8fe5d6f832a31517b9f7c356040ba6d5d"
+  integrity sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==
+
+balanced-match@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
+  integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+
+batch@0.6.1:
+  version "0.6.1"
+  resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16"
+  integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==
+
+big.js@^5.2.2:
+  version "5.2.2"
+  resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
+  integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
+
+binary-extensions@^2.0.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522"
+  integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==
+
+body-parser@1.20.3:
+  version "1.20.3"
+  resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.3.tgz#1953431221c6fb5cd63c4b36d53fab0928e548c6"
+  integrity sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==
+  dependencies:
+    bytes "3.1.2"
+    content-type "~1.0.5"
+    debug "2.6.9"
+    depd "2.0.0"
+    destroy "1.2.0"
+    http-errors "2.0.0"
+    iconv-lite "0.4.24"
+    on-finished "2.4.1"
+    qs "6.13.0"
+    raw-body "2.5.2"
+    type-is "~1.6.18"
+    unpipe "1.0.0"
+
+bonjour-service@^1.2.1:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.3.0.tgz#80d867430b5a0da64e82a8047fc1e355bdb71722"
+  integrity sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==
+  dependencies:
+    fast-deep-equal "^3.1.3"
+    multicast-dns "^7.2.5"
+
+boolbase@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
+  integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==
+
+boxen@^6.2.1:
+  version "6.2.1"
+  resolved "https://registry.yarnpkg.com/boxen/-/boxen-6.2.1.tgz#b098a2278b2cd2845deef2dff2efc38d329b434d"
+  integrity sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==
+  dependencies:
+    ansi-align "^3.0.1"
+    camelcase "^6.2.0"
+    chalk "^4.1.2"
+    cli-boxes "^3.0.0"
+    string-width "^5.0.1"
+    type-fest "^2.5.0"
+    widest-line "^4.0.1"
+    wrap-ansi "^8.0.1"
+
+boxen@^7.0.0:
+  version "7.1.1"
+  resolved "https://registry.yarnpkg.com/boxen/-/boxen-7.1.1.tgz#f9ba525413c2fec9cdb88987d835c4f7cad9c8f4"
+  integrity sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==
+  dependencies:
+    ansi-align "^3.0.1"
+    camelcase "^7.0.1"
+    chalk "^5.2.0"
+    cli-boxes "^3.0.0"
+    string-width "^5.1.2"
+    type-fest "^2.13.0"
+    widest-line "^4.0.1"
+    wrap-ansi "^8.1.0"
+
+brace-expansion@^1.1.7:
+  version "1.1.12"
+  resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.12.tgz#ab9b454466e5a8cc3a187beaad580412a9c5b843"
+  integrity sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==
+  dependencies:
+    balanced-match "^1.0.0"
+    concat-map "0.0.1"
+
+brace-expansion@^2.0.1:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.2.tgz#54fc53237a613d854c7bd37463aad17df87214e7"
+  integrity sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==
+  dependencies:
+    balanced-match "^1.0.0"
+
+braces@^3.0.3, braces@~3.0.2:
+  version "3.0.3"
+  resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789"
+  integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==
+  dependencies:
+    fill-range "^7.1.1"
+
+browserslist@^4.0.0, browserslist@^4.23.0, browserslist@^4.24.0, browserslist@^4.24.4, browserslist@^4.25.0:
+  version "4.25.0"
+  resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.25.0.tgz#986aa9c6d87916885da2b50d8eb577ac8d133b2c"
+  integrity sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==
+  dependencies:
+    caniuse-lite "^1.0.30001718"
+    electron-to-chromium "^1.5.160"
+    node-releases "^2.0.19"
+    update-browserslist-db "^1.1.3"
+
+buffer-from@^1.0.0:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
+  integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
+
+bundle-name@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-4.1.0.tgz#f3b96b34160d6431a19d7688135af7cfb8797889"
+  integrity sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==
+  dependencies:
+    run-applescript "^7.0.0"
+
+bytes@3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
+  integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==
+
+bytes@3.1.2:
+  version "3.1.2"
+  resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5"
+  integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==
+
+cacheable-lookup@^7.0.0:
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz#3476a8215d046e5a3202a9209dd13fec1f933a27"
+  integrity sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==
+
+cacheable-request@^10.2.8:
+  version "10.2.14"
+  resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-10.2.14.tgz#eb915b665fda41b79652782df3f553449c406b9d"
+  integrity sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==
+  dependencies:
+    "@types/http-cache-semantics" "^4.0.2"
+    get-stream "^6.0.1"
+    http-cache-semantics "^4.1.1"
+    keyv "^4.5.3"
+    mimic-response "^4.0.0"
+    normalize-url "^8.0.0"
+    responselike "^3.0.0"
+
+call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6"
+  integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==
+  dependencies:
+    es-errors "^1.3.0"
+    function-bind "^1.1.2"
+
+call-bind@^1.0.8:
+  version "1.0.8"
+  resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c"
+  integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==
+  dependencies:
+    call-bind-apply-helpers "^1.0.0"
+    es-define-property "^1.0.0"
+    get-intrinsic "^1.2.4"
+    set-function-length "^1.2.2"
+
+call-bound@^1.0.2, call-bound@^1.0.3:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a"
+  integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==
+  dependencies:
+    call-bind-apply-helpers "^1.0.2"
+    get-intrinsic "^1.3.0"
+
+callsites@^3.0.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
+  integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
+
+camel-case@^4.1.2:
+  version "4.1.2"
+  resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a"
+  integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==
+  dependencies:
+    pascal-case "^3.1.2"
+    tslib "^2.0.3"
+
+camelcase-css@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5"
+  integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==
+
+camelcase@^6.2.0:
+  version "6.3.0"
+  resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a"
+  integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
+
+camelcase@^7.0.1:
+  version "7.0.1"
+  resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-7.0.1.tgz#f02e50af9fd7782bc8b88a3558c32fd3a388f048"
+  integrity sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==
+
+caniuse-api@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0"
+  integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==
+  dependencies:
+    browserslist "^4.0.0"
+    caniuse-lite "^1.0.0"
+    lodash.memoize "^4.1.2"
+    lodash.uniq "^4.5.0"
+
+caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001702, caniuse-lite@^1.0.30001718:
+  version "1.0.30001724"
+  resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001724.tgz#312e163553dd70d2c0fb603d74810c85d8ed94a0"
+  integrity sha512-WqJo7p0TbHDOythNTqYujmaJTvtYRZrjpP8TCvH6Vb9CYJerJNKamKzIWOM4BkQatWj9H2lYulpdAQNBe7QhNA==
+
+ccount@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5"
+  integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==
+
+chalk@^4.0.0, chalk@^4.1.2:
+  version "4.1.2"
+  resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
+  integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
+  dependencies:
+    ansi-styles "^4.1.0"
+    supports-color "^7.1.0"
+
+chalk@^5.0.1, chalk@^5.2.0:
+  version "5.4.1"
+  resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.4.1.tgz#1b48bf0963ec158dce2aacf69c093ae2dd2092d8"
+  integrity sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==
+
+char-regex@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf"
+  integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==
+
+character-entities-html4@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-2.1.0.tgz#1f1adb940c971a4b22ba39ddca6b618dc6e56b2b"
+  integrity sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==
+
+character-entities-legacy@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz#76bc83a90738901d7bc223a9e93759fdd560125b"
+  integrity sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==
+
+character-entities@^2.0.0:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-2.0.2.tgz#2d09c2e72cd9523076ccb21157dff66ad43fcc22"
+  integrity sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==
+
+character-reference-invalid@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz#85c66b041e43b47210faf401278abf808ac45cb9"
+  integrity sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==
+
+cheerio-select@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4"
+  integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==
+  dependencies:
+    boolbase "^1.0.0"
+    css-select "^5.1.0"
+    css-what "^6.1.0"
+    domelementtype "^2.3.0"
+    domhandler "^5.0.3"
+    domutils "^3.0.1"
+
+cheerio@1.0.0-rc.12:
+  version "1.0.0-rc.12"
+  resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683"
+  integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==
+  dependencies:
+    cheerio-select "^2.1.0"
+    dom-serializer "^2.0.0"
+    domhandler "^5.0.3"
+    domutils "^3.0.1"
+    htmlparser2 "^8.0.1"
+    parse5 "^7.0.0"
+    parse5-htmlparser2-tree-adapter "^7.0.0"
+
+chevrotain-allstar@~0.3.0:
+  version "0.3.1"
+  resolved "https://registry.yarnpkg.com/chevrotain-allstar/-/chevrotain-allstar-0.3.1.tgz#b7412755f5d83cc139ab65810cdb00d8db40e6ca"
+  integrity sha512-b7g+y9A0v4mxCW1qUhf3BSVPg+/NvGErk/dOkrDaHA0nQIQGAtrOjlX//9OQtRlSCy+x9rfB5N8yC71lH1nvMw==
+  dependencies:
+    lodash-es "^4.17.21"
+
+chevrotain@~11.0.3:
+  version "11.0.3"
+  resolved "https://registry.yarnpkg.com/chevrotain/-/chevrotain-11.0.3.tgz#88ffc1fb4b5739c715807eaeedbbf200e202fc1b"
+  integrity sha512-ci2iJH6LeIkvP9eJW6gpueU8cnZhv85ELY8w8WiFtNjMHA5ad6pQLaJo9mEly/9qUyCpvqX8/POVUTf18/HFdw==
+  dependencies:
+    "@chevrotain/cst-dts-gen" "11.0.3"
+    "@chevrotain/gast" "11.0.3"
+    "@chevrotain/regexp-to-ast" "11.0.3"
+    "@chevrotain/types" "11.0.3"
+    "@chevrotain/utils" "11.0.3"
+    lodash-es "4.17.21"
+
+chokidar@^3.5.3, chokidar@^3.6.0:
+  version "3.6.0"
+  resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b"
+  integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==
+  dependencies:
+    anymatch "~3.1.2"
+    braces "~3.0.2"
+    glob-parent "~5.1.2"
+    is-binary-path "~2.1.0"
+    is-glob "~4.0.1"
+    normalize-path "~3.0.0"
+    readdirp "~3.6.0"
+  optionalDependencies:
+    fsevents "~2.3.2"
+
+chokidar@^4.0.0:
+  version "4.0.3"
+  resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.3.tgz#7be37a4c03c9aee1ecfe862a4a23b2c70c205d30"
+  integrity sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==
+  dependencies:
+    readdirp "^4.0.1"
+
+chrome-trace-event@^1.0.2:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz#05bffd7ff928465093314708c93bdfa9bd1f0f5b"
+  integrity sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==
+
+ci-info@^3.2.0:
+  version "3.9.0"
+  resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4"
+  integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==
+
+clean-css@^5.2.2, clean-css@^5.3.3, clean-css@~5.3.2:
+  version "5.3.3"
+  resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.3.tgz#b330653cd3bd6b75009cc25c714cae7b93351ccd"
+  integrity sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==
+  dependencies:
+    source-map "~0.6.0"
+
+clean-stack@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
+  integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==
+
+cli-boxes@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-3.0.0.tgz#71a10c716feeba005e4504f36329ef0b17cf3145"
+  integrity sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==
+
+cli-table3@^0.6.3:
+  version "0.6.5"
+  resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.5.tgz#013b91351762739c16a9567c21a04632e449bf2f"
+  integrity sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==
+  dependencies:
+    string-width "^4.2.0"
+  optionalDependencies:
+    "@colors/colors" "1.5.0"
+
+clone-deep@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387"
+  integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==
+  dependencies:
+    is-plain-object "^2.0.4"
+    kind-of "^6.0.2"
+    shallow-clone "^3.0.0"
+
+clsx@^2.0.0:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999"
+  integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==
+
+collapse-white-space@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-2.1.0.tgz#640257174f9f42c740b40f3b55ee752924feefca"
+  integrity sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==
+
+color-convert@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
+  integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
+  dependencies:
+    color-name "~1.1.4"
+
+color-name@~1.1.4:
+  version "1.1.4"
+  resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
+  integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+
+colord@^2.9.3:
+  version "2.9.3"
+  resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43"
+  integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==
+
+colorette@^2.0.10:
+  version "2.0.20"
+  resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a"
+  integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==
+
+combine-promises@^1.1.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/combine-promises/-/combine-promises-1.2.0.tgz#5f2e68451862acf85761ded4d9e2af7769c2ca6a"
+  integrity sha512-VcQB1ziGD0NXrhKxiwyNbCDmRzs/OShMs2GqW2DlU2A/Sd0nQxE1oWDAE5O0ygSx5mgQOn9eIFh7yKPgFRVkPQ==
+
+combined-stream@^1.0.8:
+  version "1.0.8"
+  resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
+  integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
+  dependencies:
+    delayed-stream "~1.0.0"
+
+comma-separated-tokens@^2.0.0:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee"
+  integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==
+
+commander@7, commander@^7.2.0:
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
+  integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==
+
+commander@^10.0.0:
+  version "10.0.1"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06"
+  integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==
+
+commander@^2.20.0:
+  version "2.20.3"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
+  integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
+
+commander@^4.0.0:
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068"
+  integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==
+
+commander@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae"
+  integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==
+
+commander@^8.3.0:
+  version "8.3.0"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66"
+  integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==
+
+common-path-prefix@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0"
+  integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==
+
+compressible@~2.0.18:
+  version "2.0.18"
+  resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba"
+  integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==
+  dependencies:
+    mime-db ">= 1.43.0 < 2"
+
+compression@^1.7.4:
+  version "1.8.0"
+  resolved "https://registry.yarnpkg.com/compression/-/compression-1.8.0.tgz#09420efc96e11a0f44f3a558de59e321364180f7"
+  integrity sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==
+  dependencies:
+    bytes "3.1.2"
+    compressible "~2.0.18"
+    debug "2.6.9"
+    negotiator "~0.6.4"
+    on-headers "~1.0.2"
+    safe-buffer "5.2.1"
+    vary "~1.1.2"
+
+concat-map@0.0.1:
+  version "0.0.1"
+  resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+  integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
+
+confbox@^0.1.8:
+  version "0.1.8"
+  resolved "https://registry.yarnpkg.com/confbox/-/confbox-0.1.8.tgz#820d73d3b3c82d9bd910652c5d4d599ef8ff8b06"
+  integrity sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==
+
+confbox@^0.2.1:
+  version "0.2.2"
+  resolved "https://registry.yarnpkg.com/confbox/-/confbox-0.2.2.tgz#8652f53961c74d9e081784beed78555974a9c110"
+  integrity sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==
+
+config-chain@^1.1.11:
+  version "1.1.13"
+  resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4"
+  integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==
+  dependencies:
+    ini "^1.3.4"
+    proto-list "~1.2.1"
+
+configstore@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/configstore/-/configstore-6.0.0.tgz#49eca2ebc80983f77e09394a1a56e0aca8235566"
+  integrity sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==
+  dependencies:
+    dot-prop "^6.0.1"
+    graceful-fs "^4.2.6"
+    unique-string "^3.0.0"
+    write-file-atomic "^3.0.3"
+    xdg-basedir "^5.0.1"
+
+connect-history-api-fallback@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8"
+  integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==
+
+consola@^3.2.3:
+  version "3.4.2"
+  resolved "https://registry.yarnpkg.com/consola/-/consola-3.4.2.tgz#5af110145397bb67afdab77013fdc34cae590ea7"
+  integrity sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==
+
+content-disposition@0.5.2:
+  version "0.5.2"
+  resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4"
+  integrity sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==
+
+content-disposition@0.5.4:
+  version "0.5.4"
+  resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe"
+  integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==
+  dependencies:
+    safe-buffer "5.2.1"
+
+content-type@~1.0.4, content-type@~1.0.5:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918"
+  integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==
+
+convert-source-map@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a"
+  integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==
+
+cookie-signature@1.0.6:
+  version "1.0.6"
+  resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
+  integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==
+
+cookie@0.7.1:
+  version "0.7.1"
+  resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.1.tgz#2f73c42142d5d5cf71310a74fc4ae61670e5dbc9"
+  integrity sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==
+
+copy-text-to-clipboard@^3.2.0:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz#0202b2d9bdae30a49a53f898626dcc3b49ad960b"
+  integrity sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q==
+
+copy-webpack-plugin@^11.0.0:
+  version "11.0.0"
+  resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz#96d4dbdb5f73d02dd72d0528d1958721ab72e04a"
+  integrity sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==
+  dependencies:
+    fast-glob "^3.2.11"
+    glob-parent "^6.0.1"
+    globby "^13.1.1"
+    normalize-path "^3.0.0"
+    schema-utils "^4.0.0"
+    serialize-javascript "^6.0.0"
+
+core-js-compat@^3.40.0:
+  version "3.43.0"
+  resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.43.0.tgz#055587369c458795ef316f65e0aabb808fb15840"
+  integrity sha512-2GML2ZsCc5LR7hZYz4AXmjQw8zuy2T//2QntwdnpuYI7jteT6GVYJL7F6C2C57R7gSYrcqVW3lAALefdbhBLDA==
+  dependencies:
+    browserslist "^4.25.0"
+
+core-js-pure@^3.30.2:
+  version "3.43.0"
+  resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.43.0.tgz#4df9c949c7abde839a8398d16a827a76856b1f0c"
+  integrity sha512-i/AgxU2+A+BbJdMxh3v7/vxi2SbFqxiFmg6VsDwYB4jkucrd1BZNA9a9gphC0fYMG5IBSgQcbQnk865VCLe7xA==
+
+core-js@^3.31.1:
+  version "3.43.0"
+  resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.43.0.tgz#f7258b156523208167df35dea0cfd6b6ecd4ee88"
+  integrity sha512-N6wEbTTZSYOY2rYAn85CuvWWkCK6QweMn7/4Nr3w+gDBeBhk/x4EJeY6FPo4QzDoJZxVTv8U7CMvgWk6pOHHqA==
+
+core-util-is@~1.0.0:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85"
+  integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==
+
+cose-base@^1.0.0:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/cose-base/-/cose-base-1.0.3.tgz#650334b41b869578a543358b80cda7e0abe0a60a"
+  integrity sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==
+  dependencies:
+    layout-base "^1.0.0"
+
+cose-base@^2.2.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/cose-base/-/cose-base-2.2.0.tgz#1c395c35b6e10bb83f9769ca8b817d614add5c01"
+  integrity sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==
+  dependencies:
+    layout-base "^2.0.0"
+
+cosmiconfig@^8.1.3, cosmiconfig@^8.3.5:
+  version "8.3.6"
+  resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3"
+  integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==
+  dependencies:
+    import-fresh "^3.3.0"
+    js-yaml "^4.1.0"
+    parse-json "^5.2.0"
+    path-type "^4.0.0"
+
+create-require@^1.1.0:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333"
+  integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==
+
+cross-spawn@^7.0.3, cross-spawn@^7.0.6:
+  version "7.0.6"
+  resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f"
+  integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==
+  dependencies:
+    path-key "^3.1.0"
+    shebang-command "^2.0.0"
+    which "^2.0.1"
+
+crypto-random-string@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-4.0.0.tgz#5a3cc53d7dd86183df5da0312816ceeeb5bb1fc2"
+  integrity sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==
+  dependencies:
+    type-fest "^1.0.1"
+
+css-blank-pseudo@^7.0.1:
+  version "7.0.1"
+  resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-7.0.1.tgz#32020bff20a209a53ad71b8675852b49e8d57e46"
+  integrity sha512-jf+twWGDf6LDoXDUode+nc7ZlrqfaNphrBIBrcmeP3D8yw1uPaix1gCC8LUQUGQ6CycuK2opkbFFWFuq/a94ag==
+  dependencies:
+    postcss-selector-parser "^7.0.0"
+
+css-declaration-sorter@^7.2.0:
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz#6dec1c9523bc4a643e088aab8f09e67a54961024"
+  integrity sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==
+
+css-has-pseudo@^7.0.2:
+  version "7.0.2"
+  resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-7.0.2.tgz#fb42e8de7371f2896961e1f6308f13c2c7019b72"
+  integrity sha512-nzol/h+E0bId46Kn2dQH5VElaknX2Sr0hFuB/1EomdC7j+OISt2ZzK7EHX9DZDY53WbIVAR7FYKSO2XnSf07MQ==
+  dependencies:
+    "@csstools/selector-specificity" "^5.0.0"
+    postcss-selector-parser "^7.0.0"
+    postcss-value-parser "^4.2.0"
+
+css-loader@^6.11.0:
+  version "6.11.0"
+  resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.11.0.tgz#33bae3bf6363d0a7c2cf9031c96c744ff54d85ba"
+  integrity sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==
+  dependencies:
+    icss-utils "^5.1.0"
+    postcss "^8.4.33"
+    postcss-modules-extract-imports "^3.1.0"
+    postcss-modules-local-by-default "^4.0.5"
+    postcss-modules-scope "^3.2.0"
+    postcss-modules-values "^4.0.0"
+    postcss-value-parser "^4.2.0"
+    semver "^7.5.4"
+
+css-minimizer-webpack-plugin@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-5.0.1.tgz#33effe662edb1a0bf08ad633c32fa75d0f7ec565"
+  integrity sha512-3caImjKFQkS+ws1TGcFn0V1HyDJFq1Euy589JlD6/3rV2kj+w7r5G9WDMgSHvpvXHNZ2calVypZWuEDQd9wfLg==
+  dependencies:
+    "@jridgewell/trace-mapping" "^0.3.18"
+    cssnano "^6.0.1"
+    jest-worker "^29.4.3"
+    postcss "^8.4.24"
+    schema-utils "^4.0.1"
+    serialize-javascript "^6.0.1"
+
+css-prefers-color-scheme@^10.0.0:
+  version "10.0.0"
+  resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-10.0.0.tgz#ba001b99b8105b8896ca26fc38309ddb2278bd3c"
+  integrity sha512-VCtXZAWivRglTZditUfB4StnsWr6YVZ2PRtuxQLKTNRdtAf8tpzaVPE9zXIF3VaSc7O70iK/j1+NXxyQCqdPjQ==
+
+css-select@^4.1.3:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b"
+  integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==
+  dependencies:
+    boolbase "^1.0.0"
+    css-what "^6.0.1"
+    domhandler "^4.3.1"
+    domutils "^2.8.0"
+    nth-check "^2.0.1"
+
+css-select@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6"
+  integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==
+  dependencies:
+    boolbase "^1.0.0"
+    css-what "^6.1.0"
+    domhandler "^5.0.2"
+    domutils "^3.0.1"
+    nth-check "^2.0.1"
+
+css-tree@^2.3.1:
+  version "2.3.1"
+  resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.3.1.tgz#10264ce1e5442e8572fc82fbe490644ff54b5c20"
+  integrity sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==
+  dependencies:
+    mdn-data "2.0.30"
+    source-map-js "^1.0.1"
+
+css-tree@~2.2.0:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.2.1.tgz#36115d382d60afd271e377f9c5f67d02bd48c032"
+  integrity sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==
+  dependencies:
+    mdn-data "2.0.28"
+    source-map-js "^1.0.1"
+
+css-what@^6.0.1, css-what@^6.1.0:
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4"
+  integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==
+
+cssdb@^8.3.0:
+  version "8.3.0"
+  resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-8.3.0.tgz#940becad497b8509ad822a28fb0cfe54c969ccfe"
+  integrity sha512-c7bmItIg38DgGjSwDPZOYF/2o0QU/sSgkWOMyl8votOfgFuyiFKWPesmCGEsrGLxEA9uL540cp8LdaGEjUGsZQ==
+
+cssesc@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
+  integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
+
+cssnano-preset-advanced@^6.1.2:
+  version "6.1.2"
+  resolved "https://registry.yarnpkg.com/cssnano-preset-advanced/-/cssnano-preset-advanced-6.1.2.tgz#82b090872b8f98c471f681d541c735acf8b94d3f"
+  integrity sha512-Nhao7eD8ph2DoHolEzQs5CfRpiEP0xa1HBdnFZ82kvqdmbwVBUr2r1QuQ4t1pi+D1ZpqpcO4T+wy/7RxzJ/WPQ==
+  dependencies:
+    autoprefixer "^10.4.19"
+    browserslist "^4.23.0"
+    cssnano-preset-default "^6.1.2"
+    postcss-discard-unused "^6.0.5"
+    postcss-merge-idents "^6.0.3"
+    postcss-reduce-idents "^6.0.3"
+    postcss-zindex "^6.0.2"
+
+cssnano-preset-default@^6.1.2:
+  version "6.1.2"
+  resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz#adf4b89b975aa775f2750c89dbaf199bbd9da35e"
+  integrity sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==
+  dependencies:
+    browserslist "^4.23.0"
+    css-declaration-sorter "^7.2.0"
+    cssnano-utils "^4.0.2"
+    postcss-calc "^9.0.1"
+    postcss-colormin "^6.1.0"
+    postcss-convert-values "^6.1.0"
+    postcss-discard-comments "^6.0.2"
+    postcss-discard-duplicates "^6.0.3"
+    postcss-discard-empty "^6.0.3"
+    postcss-discard-overridden "^6.0.2"
+    postcss-merge-longhand "^6.0.5"
+    postcss-merge-rules "^6.1.1"
+    postcss-minify-font-values "^6.1.0"
+    postcss-minify-gradients "^6.0.3"
+    postcss-minify-params "^6.1.0"
+    postcss-minify-selectors "^6.0.4"
+    postcss-normalize-charset "^6.0.2"
+    postcss-normalize-display-values "^6.0.2"
+    postcss-normalize-positions "^6.0.2"
+    postcss-normalize-repeat-style "^6.0.2"
+    postcss-normalize-string "^6.0.2"
+    postcss-normalize-timing-functions "^6.0.2"
+    postcss-normalize-unicode "^6.1.0"
+    postcss-normalize-url "^6.0.2"
+    postcss-normalize-whitespace "^6.0.2"
+    postcss-ordered-values "^6.0.2"
+    postcss-reduce-initial "^6.1.0"
+    postcss-reduce-transforms "^6.0.2"
+    postcss-svgo "^6.0.3"
+    postcss-unique-selectors "^6.0.4"
+
+cssnano-utils@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-4.0.2.tgz#56f61c126cd0f11f2eef1596239d730d9fceff3c"
+  integrity sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==
+
+cssnano@^6.0.1, cssnano@^6.1.2:
+  version "6.1.2"
+  resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-6.1.2.tgz#4bd19e505bd37ee7cf0dc902d3d869f6d79c66b8"
+  integrity sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA==
+  dependencies:
+    cssnano-preset-default "^6.1.2"
+    lilconfig "^3.1.1"
+
+csso@^5.0.5:
+  version "5.0.5"
+  resolved "https://registry.yarnpkg.com/csso/-/csso-5.0.5.tgz#f9b7fe6cc6ac0b7d90781bb16d5e9874303e2ca6"
+  integrity sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==
+  dependencies:
+    css-tree "~2.2.0"
+
+csstype@^3.0.2:
+  version "3.1.3"
+  resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81"
+  integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==
+
+cytoscape-cose-bilkent@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz#762fa121df9930ffeb51a495d87917c570ac209b"
+  integrity sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==
+  dependencies:
+    cose-base "^1.0.0"
+
+cytoscape-fcose@^2.2.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz#e4d6f6490df4fab58ae9cea9e5c3ab8d7472f471"
+  integrity sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==
+  dependencies:
+    cose-base "^2.2.0"
+
+cytoscape@^3.29.3:
+  version "3.32.0"
+  resolved "https://registry.yarnpkg.com/cytoscape/-/cytoscape-3.32.0.tgz#34bc2402c9bc7457ab7d9492745f034b7bf47644"
+  integrity sha512-5JHBC9n75kz5851jeklCPmZWcg3hUe6sjqJvyk3+hVqFaKcHwHgxsjeN1yLmggoUc6STbtm9/NQyabQehfjvWQ==
+
+"d3-array@1 - 2":
+  version "2.12.1"
+  resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-2.12.1.tgz#e20b41aafcdffdf5d50928004ececf815a465e81"
+  integrity sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==
+  dependencies:
+    internmap "^1.0.0"
+
+"d3-array@2 - 3", "d3-array@2.10.0 - 3", "d3-array@2.5.0 - 3", d3-array@3, d3-array@^3.2.0:
+  version "3.2.4"
+  resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-3.2.4.tgz#15fec33b237f97ac5d7c986dc77da273a8ed0bb5"
+  integrity sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==
+  dependencies:
+    internmap "1 - 2"
+
+d3-axis@3:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/d3-axis/-/d3-axis-3.0.0.tgz#c42a4a13e8131d637b745fc2973824cfeaf93322"
+  integrity sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==
+
+d3-brush@3:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/d3-brush/-/d3-brush-3.0.0.tgz#6f767c4ed8dcb79de7ede3e1c0f89e63ef64d31c"
+  integrity sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==
+  dependencies:
+    d3-dispatch "1 - 3"
+    d3-drag "2 - 3"
+    d3-interpolate "1 - 3"
+    d3-selection "3"
+    d3-transition "3"
+
+d3-chord@3:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/d3-chord/-/d3-chord-3.0.1.tgz#d156d61f485fce8327e6abf339cb41d8cbba6966"
+  integrity sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==
+  dependencies:
+    d3-path "1 - 3"
+
+"d3-color@1 - 3", d3-color@3:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-3.1.0.tgz#395b2833dfac71507f12ac2f7af23bf819de24e2"
+  integrity sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==
+
+d3-contour@4:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/d3-contour/-/d3-contour-4.0.2.tgz#bb92063bc8c5663acb2422f99c73cbb6c6ae3bcc"
+  integrity sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==
+  dependencies:
+    d3-array "^3.2.0"
+
+d3-delaunay@6:
+  version "6.0.4"
+  resolved "https://registry.yarnpkg.com/d3-delaunay/-/d3-delaunay-6.0.4.tgz#98169038733a0a5babbeda55054f795bb9e4a58b"
+  integrity sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==
+  dependencies:
+    delaunator "5"
+
+"d3-dispatch@1 - 3", d3-dispatch@3:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/d3-dispatch/-/d3-dispatch-3.0.1.tgz#5fc75284e9c2375c36c839411a0cf550cbfc4d5e"
+  integrity sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==
+
+"d3-drag@2 - 3", d3-drag@3:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/d3-drag/-/d3-drag-3.0.0.tgz#994aae9cd23c719f53b5e10e3a0a6108c69607ba"
+  integrity sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==
+  dependencies:
+    d3-dispatch "1 - 3"
+    d3-selection "3"
+
+"d3-dsv@1 - 3", d3-dsv@3:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/d3-dsv/-/d3-dsv-3.0.1.tgz#c63af978f4d6a0d084a52a673922be2160789b73"
+  integrity sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==
+  dependencies:
+    commander "7"
+    iconv-lite "0.6"
+    rw "1"
+
+"d3-ease@1 - 3", d3-ease@3:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/d3-ease/-/d3-ease-3.0.1.tgz#9658ac38a2140d59d346160f1f6c30fda0bd12f4"
+  integrity sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==
+
+d3-fetch@3:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/d3-fetch/-/d3-fetch-3.0.1.tgz#83141bff9856a0edb5e38de89cdcfe63d0a60a22"
+  integrity sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==
+  dependencies:
+    d3-dsv "1 - 3"
+
+d3-force@3:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/d3-force/-/d3-force-3.0.0.tgz#3e2ba1a61e70888fe3d9194e30d6d14eece155c4"
+  integrity sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==
+  dependencies:
+    d3-dispatch "1 - 3"
+    d3-quadtree "1 - 3"
+    d3-timer "1 - 3"
+
+"d3-format@1 - 3", d3-format@3:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-3.1.0.tgz#9260e23a28ea5cb109e93b21a06e24e2ebd55641"
+  integrity sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==
+
+d3-geo@3:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/d3-geo/-/d3-geo-3.1.1.tgz#6027cf51246f9b2ebd64f99e01dc7c3364033a4d"
+  integrity sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==
+  dependencies:
+    d3-array "2.5.0 - 3"
+
+d3-hierarchy@3:
+  version "3.1.2"
+  resolved "https://registry.yarnpkg.com/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz#b01cd42c1eed3d46db77a5966cf726f8c09160c6"
+  integrity sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==
+
+"d3-interpolate@1 - 3", "d3-interpolate@1.2.0 - 3", d3-interpolate@3:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-3.0.1.tgz#3c47aa5b32c5b3dfb56ef3fd4342078a632b400d"
+  integrity sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==
+  dependencies:
+    d3-color "1 - 3"
+
+d3-path@1:
+  version "1.0.9"
+  resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-1.0.9.tgz#48c050bb1fe8c262493a8caf5524e3e9591701cf"
+  integrity sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==
+
+"d3-path@1 - 3", d3-path@3, d3-path@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-3.1.0.tgz#22df939032fb5a71ae8b1800d61ddb7851c42526"
+  integrity sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==
+
+d3-polygon@3:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/d3-polygon/-/d3-polygon-3.0.1.tgz#0b45d3dd1c48a29c8e057e6135693ec80bf16398"
+  integrity sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==
+
+"d3-quadtree@1 - 3", d3-quadtree@3:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/d3-quadtree/-/d3-quadtree-3.0.1.tgz#6dca3e8be2b393c9a9d514dabbd80a92deef1a4f"
+  integrity sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==
+
+d3-random@3:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/d3-random/-/d3-random-3.0.1.tgz#d4926378d333d9c0bfd1e6fa0194d30aebaa20f4"
+  integrity sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==
+
+d3-sankey@^0.12.3:
+  version "0.12.3"
+  resolved "https://registry.yarnpkg.com/d3-sankey/-/d3-sankey-0.12.3.tgz#b3c268627bd72e5d80336e8de6acbfec9d15d01d"
+  integrity sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==
+  dependencies:
+    d3-array "1 - 2"
+    d3-shape "^1.2.0"
+
+d3-scale-chromatic@3:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz#34c39da298b23c20e02f1a4b239bd0f22e7f1314"
+  integrity sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==
+  dependencies:
+    d3-color "1 - 3"
+    d3-interpolate "1 - 3"
+
+d3-scale@4:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-4.0.2.tgz#82b38e8e8ff7080764f8dcec77bd4be393689396"
+  integrity sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==
+  dependencies:
+    d3-array "2.10.0 - 3"
+    d3-format "1 - 3"
+    d3-interpolate "1.2.0 - 3"
+    d3-time "2.1.1 - 3"
+    d3-time-format "2 - 4"
+
+"d3-selection@2 - 3", d3-selection@3:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-3.0.0.tgz#c25338207efa72cc5b9bd1458a1a41901f1e1b31"
+  integrity sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==
+
+d3-shape@3:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-3.2.0.tgz#a1a839cbd9ba45f28674c69d7f855bcf91dfc6a5"
+  integrity sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==
+  dependencies:
+    d3-path "^3.1.0"
+
+d3-shape@^1.2.0:
+  version "1.3.7"
+  resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-1.3.7.tgz#df63801be07bc986bc54f63789b4fe502992b5d7"
+  integrity sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==
+  dependencies:
+    d3-path "1"
+
+"d3-time-format@2 - 4", d3-time-format@4:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-4.1.0.tgz#7ab5257a5041d11ecb4fe70a5c7d16a195bb408a"
+  integrity sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==
+  dependencies:
+    d3-time "1 - 3"
+
+"d3-time@1 - 3", "d3-time@2.1.1 - 3", d3-time@3:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-3.1.0.tgz#9310db56e992e3c0175e1ef385e545e48a9bb5c7"
+  integrity sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==
+  dependencies:
+    d3-array "2 - 3"
+
+"d3-timer@1 - 3", d3-timer@3:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-3.0.1.tgz#6284d2a2708285b1abb7e201eda4380af35e63b0"
+  integrity sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==
+
+"d3-transition@2 - 3", d3-transition@3:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/d3-transition/-/d3-transition-3.0.1.tgz#6869fdde1448868077fdd5989200cb61b2a1645f"
+  integrity sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==
+  dependencies:
+    d3-color "1 - 3"
+    d3-dispatch "1 - 3"
+    d3-ease "1 - 3"
+    d3-interpolate "1 - 3"
+    d3-timer "1 - 3"
+
+d3-zoom@3:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/d3-zoom/-/d3-zoom-3.0.0.tgz#d13f4165c73217ffeaa54295cd6969b3e7aee8f3"
+  integrity sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==
+  dependencies:
+    d3-dispatch "1 - 3"
+    d3-drag "2 - 3"
+    d3-interpolate "1 - 3"
+    d3-selection "2 - 3"
+    d3-transition "2 - 3"
+
+d3@^7.9.0:
+  version "7.9.0"
+  resolved "https://registry.yarnpkg.com/d3/-/d3-7.9.0.tgz#579e7acb3d749caf8860bd1741ae8d371070cd5d"
+  integrity sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==
+  dependencies:
+    d3-array "3"
+    d3-axis "3"
+    d3-brush "3"
+    d3-chord "3"
+    d3-color "3"
+    d3-contour "4"
+    d3-delaunay "6"
+    d3-dispatch "3"
+    d3-drag "3"
+    d3-dsv "3"
+    d3-ease "3"
+    d3-fetch "3"
+    d3-force "3"
+    d3-format "3"
+    d3-geo "3"
+    d3-hierarchy "3"
+    d3-interpolate "3"
+    d3-path "3"
+    d3-polygon "3"
+    d3-quadtree "3"
+    d3-random "3"
+    d3-scale "4"
+    d3-scale-chromatic "3"
+    d3-selection "3"
+    d3-shape "3"
+    d3-time "3"
+    d3-time-format "4"
+    d3-timer "3"
+    d3-transition "3"
+    d3-zoom "3"
+
+dagre-d3-es@7.0.11:
+  version "7.0.11"
+  resolved "https://registry.yarnpkg.com/dagre-d3-es/-/dagre-d3-es-7.0.11.tgz#2237e726c0577bfe67d1a7cfd2265b9ab2c15c40"
+  integrity sha512-tvlJLyQf834SylNKax8Wkzco/1ias1OPw8DcUMDE7oUIoSEW25riQVuiu/0OWEFqT0cxHT3Pa9/D82Jr47IONw==
+  dependencies:
+    d3 "^7.9.0"
+    lodash-es "^4.17.21"
+
+dayjs@^1.11.13:
+  version "1.11.13"
+  resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.13.tgz#92430b0139055c3ebb60150aa13e860a4b5a366c"
+  integrity sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==
+
+debounce@^1.2.1:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5"
+  integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==
+
+debug@2.6.9:
+  version "2.6.9"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+  integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
+  dependencies:
+    ms "2.0.0"
+
+debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.4.0:
+  version "4.4.1"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.1.tgz#e5a8bc6cbc4c6cd3e64308b0693a3d4fa550189b"
+  integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==
+  dependencies:
+    ms "^2.1.3"
+
+decode-named-character-reference@^1.0.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz#25c32ae6dd5e21889549d40f676030e9514cc0ed"
+  integrity sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==
+  dependencies:
+    character-entities "^2.0.0"
+
+decompress-response@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc"
+  integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==
+  dependencies:
+    mimic-response "^3.1.0"
+
+deep-extend@^0.6.0:
+  version "0.6.0"
+  resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
+  integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
+
+deepmerge@^4.3.1:
+  version "4.3.1"
+  resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a"
+  integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==
+
+default-browser-id@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-5.0.0.tgz#a1d98bf960c15082d8a3fa69e83150ccccc3af26"
+  integrity sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==
+
+default-browser@^5.2.1:
+  version "5.2.1"
+  resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-5.2.1.tgz#7b7ba61204ff3e425b556869ae6d3e9d9f1712cf"
+  integrity sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==
+  dependencies:
+    bundle-name "^4.1.0"
+    default-browser-id "^5.0.0"
+
+defer-to-connect@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587"
+  integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==
+
+define-data-property@^1.0.1, define-data-property@^1.1.4:
+  version "1.1.4"
+  resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e"
+  integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==
+  dependencies:
+    es-define-property "^1.0.0"
+    es-errors "^1.3.0"
+    gopd "^1.0.1"
+
+define-lazy-prop@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f"
+  integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==
+
+define-lazy-prop@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f"
+  integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==
+
+define-properties@^1.2.1:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c"
+  integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==
+  dependencies:
+    define-data-property "^1.0.1"
+    has-property-descriptors "^1.0.0"
+    object-keys "^1.1.1"
+
+delaunator@5:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/delaunator/-/delaunator-5.0.1.tgz#39032b08053923e924d6094fe2cde1a99cc51278"
+  integrity sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==
+  dependencies:
+    robust-predicates "^3.0.2"
+
+delayed-stream@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+  integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
+
+depd@2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
+  integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
+
+depd@~1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
+  integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==
+
+dequal@^2.0.0:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be"
+  integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==
+
+destroy@1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015"
+  integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==
+
+detect-libc@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
+  integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==
+
+detect-node@^2.0.4:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1"
+  integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==
+
+detect-port@^1.5.1:
+  version "1.6.1"
+  resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.6.1.tgz#45e4073997c5f292b957cb678fb0bb8ed4250a67"
+  integrity sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q==
+  dependencies:
+    address "^1.0.1"
+    debug "4"
+
+devlop@^1.0.0, devlop@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/devlop/-/devlop-1.1.0.tgz#4db7c2ca4dc6e0e834c30be70c94bbc976dc7018"
+  integrity sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==
+  dependencies:
+    dequal "^2.0.0"
+
+didyoumean@^1.2.2:
+  version "1.2.2"
+  resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037"
+  integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==
+
+diff@^4.0.1:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
+  integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==
+
+dir-glob@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
+  integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
+  dependencies:
+    path-type "^4.0.0"
+
+dlv@^1.1.3:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79"
+  integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==
+
+dns-packet@^5.2.2:
+  version "5.6.1"
+  resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.6.1.tgz#ae888ad425a9d1478a0674256ab866de1012cf2f"
+  integrity sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==
+  dependencies:
+    "@leichtgewicht/ip-codec" "^2.0.1"
+
+docusaurus-plugin-remote-content@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/docusaurus-plugin-remote-content/-/docusaurus-plugin-remote-content-4.0.0.tgz#2e8980a5ec7be543eec9f715624bc81cd92e45be"
+  integrity sha512-e+gBmNdgOwA+7u6O2kk/u1w4ET23j8OIF6OiOWV6EoKHJJ/w/8U5smkHNlrQC3hQOltxE2NRC1jbsG7wfS+d3w==
+  dependencies:
+    axios "^1.6.0"
+    picocolors "^1.0.0"
+    pretty-ms "^7.0.1"
+    rimraf "^5.0.5"
+
+docusaurus-plugin-sass@^0.2.6:
+  version "0.2.6"
+  resolved "https://registry.yarnpkg.com/docusaurus-plugin-sass/-/docusaurus-plugin-sass-0.2.6.tgz#b4930a1fe1cc7bcead639bb1bee38bce0ffd073d"
+  integrity sha512-2hKQQDkrufMong9upKoG/kSHJhuwd+FA3iAe/qzS/BmWpbIpe7XKmq5wlz4J5CJaOPu4x+iDJbgAxZqcoQf0kg==
+  dependencies:
+    sass-loader "^16.0.2"
+
+dom-converter@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768"
+  integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==
+  dependencies:
+    utila "~0.4"
+
+dom-serializer@^1.0.1:
+  version "1.4.1"
+  resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30"
+  integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==
+  dependencies:
+    domelementtype "^2.0.1"
+    domhandler "^4.2.0"
+    entities "^2.0.0"
+
+dom-serializer@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53"
+  integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==
+  dependencies:
+    domelementtype "^2.3.0"
+    domhandler "^5.0.2"
+    entities "^4.2.0"
+
+domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d"
+  integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==
+
+domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1:
+  version "4.3.1"
+  resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c"
+  integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==
+  dependencies:
+    domelementtype "^2.2.0"
+
+domhandler@^5.0.2, domhandler@^5.0.3:
+  version "5.0.3"
+  resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31"
+  integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==
+  dependencies:
+    domelementtype "^2.3.0"
+
+dompurify@^3.2.5:
+  version "3.2.6"
+  resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.2.6.tgz#ca040a6ad2b88e2a92dc45f38c79f84a714a1cad"
+  integrity sha512-/2GogDQlohXPZe6D6NOgQvXLPSYBqIWMnZ8zzOhn09REE4eyAzb+Hed3jhoM9OkuaJ8P6ZGTTVWQKAi8ieIzfQ==
+  optionalDependencies:
+    "@types/trusted-types" "^2.0.7"
+
+domutils@^2.5.2, domutils@^2.8.0:
+  version "2.8.0"
+  resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135"
+  integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==
+  dependencies:
+    dom-serializer "^1.0.1"
+    domelementtype "^2.2.0"
+    domhandler "^4.2.0"
+
+domutils@^3.0.1:
+  version "3.2.2"
+  resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.2.2.tgz#edbfe2b668b0c1d97c24baf0f1062b132221bc78"
+  integrity sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==
+  dependencies:
+    dom-serializer "^2.0.0"
+    domelementtype "^2.3.0"
+    domhandler "^5.0.3"
+
+dot-case@^3.0.4:
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751"
+  integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==
+  dependencies:
+    no-case "^3.0.4"
+    tslib "^2.0.3"
+
+dot-prop@^6.0.1:
+  version "6.0.1"
+  resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-6.0.1.tgz#fc26b3cf142b9e59b74dbd39ed66ce620c681083"
+  integrity sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==
+  dependencies:
+    is-obj "^2.0.0"
+
+dunder-proto@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a"
+  integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==
+  dependencies:
+    call-bind-apply-helpers "^1.0.1"
+    es-errors "^1.3.0"
+    gopd "^1.2.0"
+
+duplexer@^0.1.2:
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6"
+  integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==
+
+eastasianwidth@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb"
+  integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
+
+ee-first@1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
+  integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==
+
+electron-to-chromium@^1.5.160:
+  version "1.5.171"
+  resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.171.tgz#e552b4fd73d4dd941ee4c70ae288a8a39f818726"
+  integrity sha512-scWpzXEJEMrGJa4Y6m/tVotb0WuvNmasv3wWVzUAeCgKU0ToFOhUW6Z+xWnRQANMYGxN4ngJXIThgBJOqzVPCQ==
+
+emoji-regex@^8.0.0:
+  version "8.0.0"
+  resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
+  integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
+
+emoji-regex@^9.2.2:
+  version "9.2.2"
+  resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
+  integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
+
+emojilib@^2.4.0:
+  version "2.4.0"
+  resolved "https://registry.yarnpkg.com/emojilib/-/emojilib-2.4.0.tgz#ac518a8bb0d5f76dda57289ccb2fdf9d39ae721e"
+  integrity sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==
+
+emojis-list@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78"
+  integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==
+
+emoticon@^4.0.1:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/emoticon/-/emoticon-4.1.0.tgz#d5a156868ee173095627a33de3f1e914c3dde79e"
+  integrity sha512-VWZfnxqwNcc51hIy/sbOdEem6D+cVtpPzEEtVAFdaas30+1dgkyaOQ4sQ6Bp0tOMqWO1v+HQfYaoodOkdhK6SQ==
+
+encodeurl@~1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
+  integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==
+
+encodeurl@~2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58"
+  integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==
+
+enhanced-resolve@^5.17.1:
+  version "5.18.1"
+  resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz#728ab082f8b7b6836de51f1637aab5d3b9568faf"
+  integrity sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==
+  dependencies:
+    graceful-fs "^4.2.4"
+    tapable "^2.2.0"
+
+entities@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55"
+  integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==
+
+entities@^4.2.0, entities@^4.4.0:
+  version "4.5.0"
+  resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48"
+  integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
+
+entities@^6.0.0:
+  version "6.0.1"
+  resolved "https://registry.yarnpkg.com/entities/-/entities-6.0.1.tgz#c28c34a43379ca7f61d074130b2f5f7020a30694"
+  integrity sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==
+
+error-ex@^1.3.1:
+  version "1.3.2"
+  resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
+  integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
+  dependencies:
+    is-arrayish "^0.2.1"
+
+es-define-property@^1.0.0, es-define-property@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa"
+  integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==
+
+es-errors@^1.3.0:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f"
+  integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==
+
+es-module-lexer@^1.2.1:
+  version "1.7.0"
+  resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.7.0.tgz#9159601561880a85f2734560a9099b2c31e5372a"
+  integrity sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==
+
+es-object-atoms@^1.0.0, es-object-atoms@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1"
+  integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==
+  dependencies:
+    es-errors "^1.3.0"
+
+es-set-tostringtag@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d"
+  integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==
+  dependencies:
+    es-errors "^1.3.0"
+    get-intrinsic "^1.2.6"
+    has-tostringtag "^1.0.2"
+    hasown "^2.0.2"
+
+esast-util-from-estree@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz#8d1cfb51ad534d2f159dc250e604f3478a79f1ad"
+  integrity sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==
+  dependencies:
+    "@types/estree-jsx" "^1.0.0"
+    devlop "^1.0.0"
+    estree-util-visit "^2.0.0"
+    unist-util-position-from-estree "^2.0.0"
+
+esast-util-from-js@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/esast-util-from-js/-/esast-util-from-js-2.0.1.tgz#5147bec34cc9da44accf52f87f239a40ac3e8225"
+  integrity sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==
+  dependencies:
+    "@types/estree-jsx" "^1.0.0"
+    acorn "^8.0.0"
+    esast-util-from-estree "^2.0.0"
+    vfile-message "^4.0.0"
+
+escalade@^3.1.1, escalade@^3.2.0:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5"
+  integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==
+
+escape-goat@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-4.0.0.tgz#9424820331b510b0666b98f7873fe11ac4aa8081"
+  integrity sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==
+
+escape-html@^1.0.3, escape-html@~1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
+  integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==
+
+escape-string-regexp@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+  integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
+
+escape-string-regexp@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
+  integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
+
+escape-string-regexp@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8"
+  integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==
+
+eslint-scope@5.1.1:
+  version "5.1.1"
+  resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
+  integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
+  dependencies:
+    esrecurse "^4.3.0"
+    estraverse "^4.1.1"
+
+esprima@^4.0.0:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
+  integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
+
+esrecurse@^4.3.0:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
+  integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
+  dependencies:
+    estraverse "^5.2.0"
+
+estraverse@^4.1.1:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
+  integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
+
+estraverse@^5.2.0:
+  version "5.3.0"
+  resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
+  integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
+
+estree-util-attach-comments@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz#344bde6a64c8a31d15231e5ee9e297566a691c2d"
+  integrity sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==
+  dependencies:
+    "@types/estree" "^1.0.0"
+
+estree-util-build-jsx@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz#b6d0bced1dcc4f06f25cf0ceda2b2dcaf98168f1"
+  integrity sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==
+  dependencies:
+    "@types/estree-jsx" "^1.0.0"
+    devlop "^1.0.0"
+    estree-util-is-identifier-name "^3.0.0"
+    estree-walker "^3.0.0"
+
+estree-util-is-identifier-name@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz#0b5ef4c4ff13508b34dcd01ecfa945f61fce5dbd"
+  integrity sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==
+
+estree-util-scope@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/estree-util-scope/-/estree-util-scope-1.0.0.tgz#9cbdfc77f5cb51e3d9ed4ad9c4adbff22d43e585"
+  integrity sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==
+  dependencies:
+    "@types/estree" "^1.0.0"
+    devlop "^1.0.0"
+
+estree-util-to-js@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz#10a6fb924814e6abb62becf0d2bc4dea51d04f17"
+  integrity sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==
+  dependencies:
+    "@types/estree-jsx" "^1.0.0"
+    astring "^1.8.0"
+    source-map "^0.7.0"
+
+estree-util-value-to-estree@^3.0.1:
+  version "3.4.0"
+  resolved "https://registry.yarnpkg.com/estree-util-value-to-estree/-/estree-util-value-to-estree-3.4.0.tgz#827122e40c3a756d3c4cf5d5d296fa06026a1a4f"
+  integrity sha512-Zlp+gxis+gCfK12d3Srl2PdX2ybsEA8ZYy6vQGVQTNNYLEGRQQ56XB64bjemN8kxIKXP1nC9ip4Z+ILy9LGzvQ==
+  dependencies:
+    "@types/estree" "^1.0.0"
+
+estree-util-visit@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/estree-util-visit/-/estree-util-visit-2.0.0.tgz#13a9a9f40ff50ed0c022f831ddf4b58d05446feb"
+  integrity sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==
+  dependencies:
+    "@types/estree-jsx" "^1.0.0"
+    "@types/unist" "^3.0.0"
+
+estree-walker@^3.0.0:
+  version "3.0.3"
+  resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d"
+  integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==
+  dependencies:
+    "@types/estree" "^1.0.0"
+
+esutils@^2.0.2:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
+  integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
+
+eta@^2.2.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/eta/-/eta-2.2.0.tgz#eb8b5f8c4e8b6306561a455e62cd7492fe3a9b8a"
+  integrity sha512-UVQ72Rqjy/ZKQalzV5dCCJP80GrmPrMxh6NlNf+erV6ObL0ZFkhCstWRawS85z3smdr3d2wXPsZEY7rDPfGd2g==
+
+etag@~1.8.1:
+  version "1.8.1"
+  resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
+  integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==
+
+eval@^0.1.8:
+  version "0.1.8"
+  resolved "https://registry.yarnpkg.com/eval/-/eval-0.1.8.tgz#2b903473b8cc1d1989b83a1e7923f883eb357f85"
+  integrity sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==
+  dependencies:
+    "@types/node" "*"
+    require-like ">= 0.1.1"
+
+eventemitter3@^4.0.0, eventemitter3@^4.0.4:
+  version "4.0.7"
+  resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f"
+  integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==
+
+events@^3.2.0:
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
+  integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
+
+execa@5.1.1:
+  version "5.1.1"
+  resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd"
+  integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==
+  dependencies:
+    cross-spawn "^7.0.3"
+    get-stream "^6.0.0"
+    human-signals "^2.1.0"
+    is-stream "^2.0.0"
+    merge-stream "^2.0.0"
+    npm-run-path "^4.0.1"
+    onetime "^5.1.2"
+    signal-exit "^3.0.3"
+    strip-final-newline "^2.0.0"
+
+express@^4.21.2:
+  version "4.21.2"
+  resolved "https://registry.yarnpkg.com/express/-/express-4.21.2.tgz#cf250e48362174ead6cea4a566abef0162c1ec32"
+  integrity sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==
+  dependencies:
+    accepts "~1.3.8"
+    array-flatten "1.1.1"
+    body-parser "1.20.3"
+    content-disposition "0.5.4"
+    content-type "~1.0.4"
+    cookie "0.7.1"
+    cookie-signature "1.0.6"
+    debug "2.6.9"
+    depd "2.0.0"
+    encodeurl "~2.0.0"
+    escape-html "~1.0.3"
+    etag "~1.8.1"
+    finalhandler "1.3.1"
+    fresh "0.5.2"
+    http-errors "2.0.0"
+    merge-descriptors "1.0.3"
+    methods "~1.1.2"
+    on-finished "2.4.1"
+    parseurl "~1.3.3"
+    path-to-regexp "0.1.12"
+    proxy-addr "~2.0.7"
+    qs "6.13.0"
+    range-parser "~1.2.1"
+    safe-buffer "5.2.1"
+    send "0.19.0"
+    serve-static "1.16.2"
+    setprototypeof "1.2.0"
+    statuses "2.0.1"
+    type-is "~1.6.18"
+    utils-merge "1.0.1"
+    vary "~1.1.2"
+
+exsolve@^1.0.1:
+  version "1.0.7"
+  resolved "https://registry.yarnpkg.com/exsolve/-/exsolve-1.0.7.tgz#3b74e4c7ca5c5f9a19c3626ca857309fa99f9e9e"
+  integrity sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==
+
+extend-shallow@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
+  integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==
+  dependencies:
+    is-extendable "^0.1.0"
+
+extend@^3.0.0:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
+  integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
+
+fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
+  version "3.1.3"
+  resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
+  integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
+
+fast-glob@^3.2.11, fast-glob@^3.2.9, fast-glob@^3.3.0, fast-glob@^3.3.2:
+  version "3.3.3"
+  resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818"
+  integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==
+  dependencies:
+    "@nodelib/fs.stat" "^2.0.2"
+    "@nodelib/fs.walk" "^1.2.3"
+    glob-parent "^5.1.2"
+    merge2 "^1.3.0"
+    micromatch "^4.0.8"
+
+fast-json-stable-stringify@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
+  integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
+
+fast-uri@^3.0.1:
+  version "3.0.6"
+  resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.6.tgz#88f130b77cfaea2378d56bf970dea21257a68748"
+  integrity sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==
+
+fastq@^1.6.0:
+  version "1.19.1"
+  resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.19.1.tgz#d50eaba803c8846a883c16492821ebcd2cda55f5"
+  integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==
+  dependencies:
+    reusify "^1.0.4"
+
+fault@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/fault/-/fault-2.0.1.tgz#d47ca9f37ca26e4bd38374a7c500b5a384755b6c"
+  integrity sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==
+  dependencies:
+    format "^0.2.0"
+
+faye-websocket@^0.11.3:
+  version "0.11.4"
+  resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da"
+  integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==
+  dependencies:
+    websocket-driver ">=0.5.1"
+
+feed@^4.2.2:
+  version "4.2.2"
+  resolved "https://registry.yarnpkg.com/feed/-/feed-4.2.2.tgz#865783ef6ed12579e2c44bbef3c9113bc4956a7e"
+  integrity sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==
+  dependencies:
+    xml-js "^1.6.11"
+
+figures@^3.2.0:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af"
+  integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==
+  dependencies:
+    escape-string-regexp "^1.0.5"
+
+file-loader@^6.2.0:
+  version "6.2.0"
+  resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d"
+  integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==
+  dependencies:
+    loader-utils "^2.0.0"
+    schema-utils "^3.0.0"
+
+fill-range@^7.1.1:
+  version "7.1.1"
+  resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292"
+  integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==
+  dependencies:
+    to-regex-range "^5.0.1"
+
+finalhandler@1.3.1:
+  version "1.3.1"
+  resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.3.1.tgz#0c575f1d1d324ddd1da35ad7ece3df7d19088019"
+  integrity sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==
+  dependencies:
+    debug "2.6.9"
+    encodeurl "~2.0.0"
+    escape-html "~1.0.3"
+    on-finished "2.4.1"
+    parseurl "~1.3.3"
+    statuses "2.0.1"
+    unpipe "~1.0.0"
+
+find-cache-dir@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-4.0.0.tgz#a30ee0448f81a3990708f6453633c733e2f6eec2"
+  integrity sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==
+  dependencies:
+    common-path-prefix "^3.0.0"
+    pkg-dir "^7.0.0"
+
+find-up@^6.3.0:
+  version "6.3.0"
+  resolved "https://registry.yarnpkg.com/find-up/-/find-up-6.3.0.tgz#2abab3d3280b2dc7ac10199ef324c4e002c8c790"
+  integrity sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==
+  dependencies:
+    locate-path "^7.1.0"
+    path-exists "^5.0.0"
+
+flat@^5.0.2:
+  version "5.0.2"
+  resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241"
+  integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==
+
+follow-redirects@^1.0.0, follow-redirects@^1.15.6:
+  version "1.15.9"
+  resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1"
+  integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==
+
+foreground-child@^3.1.0:
+  version "3.3.1"
+  resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.1.tgz#32e8e9ed1b68a3497befb9ac2b6adf92a638576f"
+  integrity sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==
+  dependencies:
+    cross-spawn "^7.0.6"
+    signal-exit "^4.0.1"
+
+form-data-encoder@^2.1.2:
+  version "2.1.4"
+  resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-2.1.4.tgz#261ea35d2a70d48d30ec7a9603130fa5515e9cd5"
+  integrity sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==
+
+form-data@^4.0.0:
+  version "4.0.3"
+  resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.3.tgz#608b1b3f3e28be0fccf5901fc85fb3641e5cf0ae"
+  integrity sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==
+  dependencies:
+    asynckit "^0.4.0"
+    combined-stream "^1.0.8"
+    es-set-tostringtag "^2.1.0"
+    hasown "^2.0.2"
+    mime-types "^2.1.12"
+
+format@^0.2.0:
+  version "0.2.2"
+  resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b"
+  integrity sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==
+
+forwarded@0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811"
+  integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==
+
+fraction.js@^4.3.7:
+  version "4.3.7"
+  resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7"
+  integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==
+
+framer-motion@^12.18.1:
+  version "12.18.1"
+  resolved "https://registry.yarnpkg.com/framer-motion/-/framer-motion-12.18.1.tgz#783dc9ea7c816d315c6eebc49cd3a82c5fc50615"
+  integrity sha512-6o4EDuRPLk4LSZ1kRnnEOurbQ86MklVk+Y1rFBUKiF+d2pCdvMjWVu0ZkyMVCTwl5UyTH2n/zJEJx+jvTYuxow==
+  dependencies:
+    motion-dom "^12.18.1"
+    motion-utils "^12.18.1"
+    tslib "^2.4.0"
+
+fresh@0.5.2:
+  version "0.5.2"
+  resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
+  integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==
+
+fs-extra@^11.1.1, fs-extra@^11.2.0:
+  version "11.3.0"
+  resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.0.tgz#0daced136bbaf65a555a326719af931adc7a314d"
+  integrity sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==
+  dependencies:
+    graceful-fs "^4.2.0"
+    jsonfile "^6.0.1"
+    universalify "^2.0.0"
+
+fsevents@~2.3.2:
+  version "2.3.3"
+  resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
+  integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
+
+function-bind@^1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
+  integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
+
+gensync@^1.0.0-beta.2:
+  version "1.0.0-beta.2"
+  resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
+  integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
+
+get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.3.0:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01"
+  integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==
+  dependencies:
+    call-bind-apply-helpers "^1.0.2"
+    es-define-property "^1.0.1"
+    es-errors "^1.3.0"
+    es-object-atoms "^1.1.1"
+    function-bind "^1.1.2"
+    get-proto "^1.0.1"
+    gopd "^1.2.0"
+    has-symbols "^1.1.0"
+    hasown "^2.0.2"
+    math-intrinsics "^1.1.0"
+
+get-own-enumerable-property-symbols@^3.0.0:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664"
+  integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==
+
+get-proto@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1"
+  integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==
+  dependencies:
+    dunder-proto "^1.0.1"
+    es-object-atoms "^1.0.0"
+
+get-stream@^6.0.0, get-stream@^6.0.1:
+  version "6.0.1"
+  resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
+  integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==
+
+github-slugger@^1.5.0:
+  version "1.5.0"
+  resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.5.0.tgz#17891bbc73232051474d68bd867a34625c955f7d"
+  integrity sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==
+
+glob-parent@^5.1.2, glob-parent@~5.1.2:
+  version "5.1.2"
+  resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
+  integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
+  dependencies:
+    is-glob "^4.0.1"
+
+glob-parent@^6.0.1, glob-parent@^6.0.2:
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3"
+  integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==
+  dependencies:
+    is-glob "^4.0.3"
+
+glob-to-regexp@^0.4.1:
+  version "0.4.1"
+  resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e"
+  integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==
+
+glob@^10.3.10, glob@^10.3.7:
+  version "10.4.5"
+  resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956"
+  integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==
+  dependencies:
+    foreground-child "^3.1.0"
+    jackspeak "^3.1.2"
+    minimatch "^9.0.4"
+    minipass "^7.1.2"
+    package-json-from-dist "^1.0.0"
+    path-scurry "^1.11.1"
+
+global-dirs@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.1.tgz#0c488971f066baceda21447aecb1a8b911d22485"
+  integrity sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==
+  dependencies:
+    ini "2.0.0"
+
+globals@^11.1.0:
+  version "11.12.0"
+  resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
+  integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
+
+globals@^15.14.0:
+  version "15.15.0"
+  resolved "https://registry.yarnpkg.com/globals/-/globals-15.15.0.tgz#7c4761299d41c32b075715a4ce1ede7897ff72a8"
+  integrity sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==
+
+globby@^11.1.0:
+  version "11.1.0"
+  resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b"
+  integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==
+  dependencies:
+    array-union "^2.1.0"
+    dir-glob "^3.0.1"
+    fast-glob "^3.2.9"
+    ignore "^5.2.0"
+    merge2 "^1.4.1"
+    slash "^3.0.0"
+
+globby@^13.1.1:
+  version "13.2.2"
+  resolved "https://registry.yarnpkg.com/globby/-/globby-13.2.2.tgz#63b90b1bf68619c2135475cbd4e71e66aa090592"
+  integrity sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==
+  dependencies:
+    dir-glob "^3.0.1"
+    fast-glob "^3.3.0"
+    ignore "^5.2.4"
+    merge2 "^1.4.1"
+    slash "^4.0.0"
+
+gopd@^1.0.1, gopd@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1"
+  integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==
+
+got@^12.1.0:
+  version "12.6.1"
+  resolved "https://registry.yarnpkg.com/got/-/got-12.6.1.tgz#8869560d1383353204b5a9435f782df9c091f549"
+  integrity sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==
+  dependencies:
+    "@sindresorhus/is" "^5.2.0"
+    "@szmarczak/http-timer" "^5.0.1"
+    cacheable-lookup "^7.0.0"
+    cacheable-request "^10.2.8"
+    decompress-response "^6.0.0"
+    form-data-encoder "^2.1.2"
+    get-stream "^6.0.1"
+    http2-wrapper "^2.1.10"
+    lowercase-keys "^3.0.0"
+    p-cancelable "^3.0.0"
+    responselike "^3.0.0"
+
+graceful-fs@4.2.10:
+  version "4.2.10"
+  resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c"
+  integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==
+
+graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9:
+  version "4.2.11"
+  resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
+  integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
+
+gray-matter@^4.0.3:
+  version "4.0.3"
+  resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-4.0.3.tgz#e893c064825de73ea1f5f7d88c7a9f7274288798"
+  integrity sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==
+  dependencies:
+    js-yaml "^3.13.1"
+    kind-of "^6.0.2"
+    section-matter "^1.0.0"
+    strip-bom-string "^1.0.0"
+
+gzip-size@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462"
+  integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==
+  dependencies:
+    duplexer "^0.1.2"
+
+hachure-fill@^0.5.2:
+  version "0.5.2"
+  resolved "https://registry.yarnpkg.com/hachure-fill/-/hachure-fill-0.5.2.tgz#d19bc4cc8750a5962b47fb1300557a85fcf934cc"
+  integrity sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==
+
+handle-thing@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e"
+  integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==
+
+has-flag@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
+  integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
+
+has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854"
+  integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==
+  dependencies:
+    es-define-property "^1.0.0"
+
+has-symbols@^1.0.3, has-symbols@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338"
+  integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==
+
+has-tostringtag@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc"
+  integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==
+  dependencies:
+    has-symbols "^1.0.3"
+
+has-yarn@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-3.0.0.tgz#c3c21e559730d1d3b57e28af1f30d06fac38147d"
+  integrity sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA==
+
+hasown@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003"
+  integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==
+  dependencies:
+    function-bind "^1.1.2"
+
+hast-util-from-parse5@^8.0.0:
+  version "8.0.3"
+  resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz#830a35022fff28c3fea3697a98c2f4cc6b835a2e"
+  integrity sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==
+  dependencies:
+    "@types/hast" "^3.0.0"
+    "@types/unist" "^3.0.0"
+    devlop "^1.0.0"
+    hastscript "^9.0.0"
+    property-information "^7.0.0"
+    vfile "^6.0.0"
+    vfile-location "^5.0.0"
+    web-namespaces "^2.0.0"
+
+hast-util-parse-selector@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz#352879fa86e25616036037dd8931fb5f34cb4a27"
+  integrity sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==
+  dependencies:
+    "@types/hast" "^3.0.0"
+
+hast-util-raw@^9.0.0:
+  version "9.1.0"
+  resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-9.1.0.tgz#79b66b26f6f68fb50dfb4716b2cdca90d92adf2e"
+  integrity sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==
+  dependencies:
+    "@types/hast" "^3.0.0"
+    "@types/unist" "^3.0.0"
+    "@ungap/structured-clone" "^1.0.0"
+    hast-util-from-parse5 "^8.0.0"
+    hast-util-to-parse5 "^8.0.0"
+    html-void-elements "^3.0.0"
+    mdast-util-to-hast "^13.0.0"
+    parse5 "^7.0.0"
+    unist-util-position "^5.0.0"
+    unist-util-visit "^5.0.0"
+    vfile "^6.0.0"
+    web-namespaces "^2.0.0"
+    zwitch "^2.0.0"
+
+hast-util-to-estree@^3.0.0:
+  version "3.1.3"
+  resolved "https://registry.yarnpkg.com/hast-util-to-estree/-/hast-util-to-estree-3.1.3.tgz#e654c1c9374645135695cc0ab9f70b8fcaf733d7"
+  integrity sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==
+  dependencies:
+    "@types/estree" "^1.0.0"
+    "@types/estree-jsx" "^1.0.0"
+    "@types/hast" "^3.0.0"
+    comma-separated-tokens "^2.0.0"
+    devlop "^1.0.0"
+    estree-util-attach-comments "^3.0.0"
+    estree-util-is-identifier-name "^3.0.0"
+    hast-util-whitespace "^3.0.0"
+    mdast-util-mdx-expression "^2.0.0"
+    mdast-util-mdx-jsx "^3.0.0"
+    mdast-util-mdxjs-esm "^2.0.0"
+    property-information "^7.0.0"
+    space-separated-tokens "^2.0.0"
+    style-to-js "^1.0.0"
+    unist-util-position "^5.0.0"
+    zwitch "^2.0.0"
+
+hast-util-to-jsx-runtime@^2.0.0:
+  version "2.3.6"
+  resolved "https://registry.yarnpkg.com/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz#ff31897aae59f62232e21594eac7ef6b63333e98"
+  integrity sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==
+  dependencies:
+    "@types/estree" "^1.0.0"
+    "@types/hast" "^3.0.0"
+    "@types/unist" "^3.0.0"
+    comma-separated-tokens "^2.0.0"
+    devlop "^1.0.0"
+    estree-util-is-identifier-name "^3.0.0"
+    hast-util-whitespace "^3.0.0"
+    mdast-util-mdx-expression "^2.0.0"
+    mdast-util-mdx-jsx "^3.0.0"
+    mdast-util-mdxjs-esm "^2.0.0"
+    property-information "^7.0.0"
+    space-separated-tokens "^2.0.0"
+    style-to-js "^1.0.0"
+    unist-util-position "^5.0.0"
+    vfile-message "^4.0.0"
+
+hast-util-to-parse5@^8.0.0:
+  version "8.0.0"
+  resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz#477cd42d278d4f036bc2ea58586130f6f39ee6ed"
+  integrity sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==
+  dependencies:
+    "@types/hast" "^3.0.0"
+    comma-separated-tokens "^2.0.0"
+    devlop "^1.0.0"
+    property-information "^6.0.0"
+    space-separated-tokens "^2.0.0"
+    web-namespaces "^2.0.0"
+    zwitch "^2.0.0"
+
+hast-util-whitespace@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz#7778ed9d3c92dd9e8c5c8f648a49c21fc51cb621"
+  integrity sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==
+  dependencies:
+    "@types/hast" "^3.0.0"
+
+hastscript@^9.0.0:
+  version "9.0.1"
+  resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-9.0.1.tgz#dbc84bef6051d40084342c229c451cd9dc567dff"
+  integrity sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==
+  dependencies:
+    "@types/hast" "^3.0.0"
+    comma-separated-tokens "^2.0.0"
+    hast-util-parse-selector "^4.0.0"
+    property-information "^7.0.0"
+    space-separated-tokens "^2.0.0"
+
+he@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
+  integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
+
+history@^4.9.0:
+  version "4.10.1"
+  resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3"
+  integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==
+  dependencies:
+    "@babel/runtime" "^7.1.2"
+    loose-envify "^1.2.0"
+    resolve-pathname "^3.0.0"
+    tiny-invariant "^1.0.2"
+    tiny-warning "^1.0.0"
+    value-equal "^1.0.1"
+
+hoist-non-react-statics@^3.1.0:
+  version "3.3.2"
+  resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45"
+  integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==
+  dependencies:
+    react-is "^16.7.0"
+
+hpack.js@^2.1.6:
+  version "2.1.6"
+  resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2"
+  integrity sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==
+  dependencies:
+    inherits "^2.0.1"
+    obuf "^1.0.0"
+    readable-stream "^2.0.1"
+    wbuf "^1.1.0"
+
+html-escaper@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453"
+  integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==
+
+html-minifier-terser@^6.0.2:
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab"
+  integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==
+  dependencies:
+    camel-case "^4.1.2"
+    clean-css "^5.2.2"
+    commander "^8.3.0"
+    he "^1.2.0"
+    param-case "^3.0.4"
+    relateurl "^0.2.7"
+    terser "^5.10.0"
+
+html-minifier-terser@^7.2.0:
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz#18752e23a2f0ed4b0f550f217bb41693e975b942"
+  integrity sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==
+  dependencies:
+    camel-case "^4.1.2"
+    clean-css "~5.3.2"
+    commander "^10.0.0"
+    entities "^4.4.0"
+    param-case "^3.0.4"
+    relateurl "^0.2.7"
+    terser "^5.15.1"
+
+html-tags@^3.3.1:
+  version "3.3.1"
+  resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.3.1.tgz#a04026a18c882e4bba8a01a3d39cfe465d40b5ce"
+  integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==
+
+html-void-elements@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-3.0.0.tgz#fc9dbd84af9e747249034d4d62602def6517f1d7"
+  integrity sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==
+
+html-webpack-plugin@^5.6.0:
+  version "5.6.3"
+  resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.6.3.tgz#a31145f0fee4184d53a794f9513147df1e653685"
+  integrity sha512-QSf1yjtSAsmf7rYBV7XX86uua4W/vkhIt0xNXKbsi2foEeW7vjJQz4bhnpL3xH+l1ryl1680uNv968Z+X6jSYg==
+  dependencies:
+    "@types/html-minifier-terser" "^6.0.0"
+    html-minifier-terser "^6.0.2"
+    lodash "^4.17.21"
+    pretty-error "^4.0.0"
+    tapable "^2.0.0"
+
+htmlparser2@^6.1.0:
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7"
+  integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==
+  dependencies:
+    domelementtype "^2.0.1"
+    domhandler "^4.0.0"
+    domutils "^2.5.2"
+    entities "^2.0.0"
+
+htmlparser2@^8.0.1:
+  version "8.0.2"
+  resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21"
+  integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==
+  dependencies:
+    domelementtype "^2.3.0"
+    domhandler "^5.0.3"
+    domutils "^3.0.1"
+    entities "^4.4.0"
+
+http-cache-semantics@^4.1.1:
+  version "4.2.0"
+  resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz#205f4db64f8562b76a4ff9235aa5279839a09dd5"
+  integrity sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==
+
+http-deceiver@^1.2.7:
+  version "1.2.7"
+  resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87"
+  integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==
+
+http-errors@2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3"
+  integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==
+  dependencies:
+    depd "2.0.0"
+    inherits "2.0.4"
+    setprototypeof "1.2.0"
+    statuses "2.0.1"
+    toidentifier "1.0.1"
+
+http-errors@~1.6.2:
+  version "1.6.3"
+  resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d"
+  integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==
+  dependencies:
+    depd "~1.1.2"
+    inherits "2.0.3"
+    setprototypeof "1.1.0"
+    statuses ">= 1.4.0 < 2"
+
+http-parser-js@>=0.5.1:
+  version "0.5.10"
+  resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.10.tgz#b3277bd6d7ed5588e20ea73bf724fcbe44609075"
+  integrity sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==
+
+http-proxy-middleware@^2.0.9:
+  version "2.0.9"
+  resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz#e9e63d68afaa4eee3d147f39149ab84c0c2815ef"
+  integrity sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==
+  dependencies:
+    "@types/http-proxy" "^1.17.8"
+    http-proxy "^1.18.1"
+    is-glob "^4.0.1"
+    is-plain-obj "^3.0.0"
+    micromatch "^4.0.2"
+
+http-proxy@^1.18.1:
+  version "1.18.1"
+  resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549"
+  integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==
+  dependencies:
+    eventemitter3 "^4.0.0"
+    follow-redirects "^1.0.0"
+    requires-port "^1.0.0"
+
+http2-wrapper@^2.1.10:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-2.2.1.tgz#310968153dcdedb160d8b72114363ef5fce1f64a"
+  integrity sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==
+  dependencies:
+    quick-lru "^5.1.1"
+    resolve-alpn "^1.2.0"
+
+human-signals@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
+  integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
+
+hyperdyperid@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/hyperdyperid/-/hyperdyperid-1.2.0.tgz#59668d323ada92228d2a869d3e474d5a33b69e6b"
+  integrity sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==
+
+iconv-lite@0.4.24:
+  version "0.4.24"
+  resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
+  integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
+  dependencies:
+    safer-buffer ">= 2.1.2 < 3"
+
+iconv-lite@0.6:
+  version "0.6.3"
+  resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
+  integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
+  dependencies:
+    safer-buffer ">= 2.1.2 < 3.0.0"
+
+icss-utils@^5.0.0, icss-utils@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae"
+  integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==
+
+ignore@^5.2.0, ignore@^5.2.4:
+  version "5.3.2"
+  resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5"
+  integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==
+
+image-size@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/image-size/-/image-size-2.0.2.tgz#84a7b43704db5736f364bf0d1b029821299b4bdc"
+  integrity sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w==
+
+immutable@^5.0.2:
+  version "5.1.3"
+  resolved "https://registry.yarnpkg.com/immutable/-/immutable-5.1.3.tgz#e6486694c8b76c37c063cca92399fa64098634d4"
+  integrity sha512-+chQdDfvscSF1SJqv2gn4SRO2ZyS3xL3r7IW/wWEEzrzLisnOlKiQu5ytC/BVNcS15C39WT2Hg/bjKjDMcu+zg==
+
+import-fresh@^3.3.0:
+  version "3.3.1"
+  resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf"
+  integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==
+  dependencies:
+    parent-module "^1.0.0"
+    resolve-from "^4.0.0"
+
+import-lazy@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-4.0.0.tgz#e8eb627483a0a43da3c03f3e35548be5cb0cc153"
+  integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==
+
+imurmurhash@^0.1.4:
+  version "0.1.4"
+  resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+  integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
+
+indent-string@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
+  integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
+
+infima@0.2.0-alpha.45:
+  version "0.2.0-alpha.45"
+  resolved "https://registry.yarnpkg.com/infima/-/infima-0.2.0-alpha.45.tgz#542aab5a249274d81679631b492973dd2c1e7466"
+  integrity sha512-uyH0zfr1erU1OohLk0fT4Rrb94AOhguWNOcD9uGrSpRvNB+6gZXUoJX5J0NtvzBO10YZ9PgvA4NFgt+fYg8ojw==
+
+inherits@2.0.3:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+  integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==
+
+inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+  integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+
+ini@2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5"
+  integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==
+
+ini@^1.3.4, ini@~1.3.0:
+  version "1.3.8"
+  resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
+  integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
+
+inline-style-parser@0.2.4:
+  version "0.2.4"
+  resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.2.4.tgz#f4af5fe72e612839fcd453d989a586566d695f22"
+  integrity sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==
+
+"internmap@1 - 2":
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/internmap/-/internmap-2.0.3.tgz#6685f23755e43c524e251d29cbc97248e3061009"
+  integrity sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==
+
+internmap@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/internmap/-/internmap-1.0.1.tgz#0017cc8a3b99605f0302f2b198d272e015e5df95"
+  integrity sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==
+
+invariant@^2.2.4:
+  version "2.2.4"
+  resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
+  integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
+  dependencies:
+    loose-envify "^1.0.0"
+
+ipaddr.js@1.9.1:
+  version "1.9.1"
+  resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
+  integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
+
+ipaddr.js@^2.1.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.2.0.tgz#d33fa7bac284f4de7af949638c9d68157c6b92e8"
+  integrity sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==
+
+is-alphabetical@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-2.0.1.tgz#01072053ea7c1036df3c7d19a6daaec7f19e789b"
+  integrity sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==
+
+is-alphanumerical@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz#7c03fbe96e3e931113e57f964b0a368cc2dfd875"
+  integrity sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==
+  dependencies:
+    is-alphabetical "^2.0.0"
+    is-decimal "^2.0.0"
+
+is-arrayish@^0.2.1:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+  integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==
+
+is-binary-path@~2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
+  integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
+  dependencies:
+    binary-extensions "^2.0.0"
+
+is-ci@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867"
+  integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==
+  dependencies:
+    ci-info "^3.2.0"
+
+is-core-module@^2.16.0:
+  version "2.16.1"
+  resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4"
+  integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==
+  dependencies:
+    hasown "^2.0.2"
+
+is-decimal@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-2.0.1.tgz#9469d2dc190d0214fd87d78b78caecc0cc14eef7"
+  integrity sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==
+
+is-docker@^2.0.0, is-docker@^2.1.1:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
+  integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
+
+is-docker@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200"
+  integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==
+
+is-extendable@^0.1.0:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+  integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==
+
+is-extglob@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+  integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
+
+is-fullwidth-code-point@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
+  integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
+
+is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1:
+  version "4.0.3"
+  resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
+  integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
+  dependencies:
+    is-extglob "^2.1.1"
+
+is-hexadecimal@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz#86b5bf668fca307498d319dfc03289d781a90027"
+  integrity sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==
+
+is-inside-container@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4"
+  integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==
+  dependencies:
+    is-docker "^3.0.0"
+
+is-installed-globally@^0.4.0:
+  version "0.4.0"
+  resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520"
+  integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==
+  dependencies:
+    global-dirs "^3.0.0"
+    is-path-inside "^3.0.2"
+
+is-network-error@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/is-network-error/-/is-network-error-1.1.0.tgz#d26a760e3770226d11c169052f266a4803d9c997"
+  integrity sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==
+
+is-npm@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-6.0.0.tgz#b59e75e8915543ca5d881ecff864077cba095261"
+  integrity sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==
+
+is-number@^7.0.0:
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
+  integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+
+is-obj@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
+  integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==
+
+is-obj@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982"
+  integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==
+
+is-path-inside@^3.0.2:
+  version "3.0.3"
+  resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"
+  integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
+
+is-plain-obj@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7"
+  integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==
+
+is-plain-obj@^4.0.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0"
+  integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==
+
+is-plain-object@^2.0.4:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
+  integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
+  dependencies:
+    isobject "^3.0.1"
+
+is-regexp@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069"
+  integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==
+
+is-stream@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077"
+  integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==
+
+is-typedarray@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+  integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==
+
+is-wsl@^2.2.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
+  integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==
+  dependencies:
+    is-docker "^2.0.0"
+
+is-wsl@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-3.1.0.tgz#e1c657e39c10090afcbedec61720f6b924c3cbd2"
+  integrity sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==
+  dependencies:
+    is-inside-container "^1.0.0"
+
+is-yarn-global@^0.4.0:
+  version "0.4.1"
+  resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.4.1.tgz#b312d902b313f81e4eaf98b6361ba2b45cd694bb"
+  integrity sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ==
+
+isarray@0.0.1:
+  version "0.0.1"
+  resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
+  integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==
+
+isarray@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+  integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==
+
+isexe@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+  integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
+
+isobject@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
+  integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==
+
+jackspeak@^3.1.2:
+  version "3.4.3"
+  resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a"
+  integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==
+  dependencies:
+    "@isaacs/cliui" "^8.0.2"
+  optionalDependencies:
+    "@pkgjs/parseargs" "^0.11.0"
+
+jest-util@^29.7.0:
+  version "29.7.0"
+  resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc"
+  integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==
+  dependencies:
+    "@jest/types" "^29.6.3"
+    "@types/node" "*"
+    chalk "^4.0.0"
+    ci-info "^3.2.0"
+    graceful-fs "^4.2.9"
+    picomatch "^2.2.3"
+
+jest-worker@^27.4.5:
+  version "27.5.1"
+  resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0"
+  integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==
+  dependencies:
+    "@types/node" "*"
+    merge-stream "^2.0.0"
+    supports-color "^8.0.0"
+
+jest-worker@^29.4.3:
+  version "29.7.0"
+  resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a"
+  integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==
+  dependencies:
+    "@types/node" "*"
+    jest-util "^29.7.0"
+    merge-stream "^2.0.0"
+    supports-color "^8.0.0"
+
+jiti@^1.20.0, jiti@^1.21.6:
+  version "1.21.7"
+  resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.7.tgz#9dd81043424a3d28458b193d965f0d18a2300ba9"
+  integrity sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==
+
+joi@^17.9.2:
+  version "17.13.3"
+  resolved "https://registry.yarnpkg.com/joi/-/joi-17.13.3.tgz#0f5cc1169c999b30d344366d384b12d92558bcec"
+  integrity sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==
+  dependencies:
+    "@hapi/hoek" "^9.3.0"
+    "@hapi/topo" "^5.1.0"
+    "@sideway/address" "^4.1.5"
+    "@sideway/formula" "^3.0.1"
+    "@sideway/pinpoint" "^2.0.0"
+
+"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+  integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+
+js-yaml@^3.13.1:
+  version "3.14.1"
+  resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537"
+  integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==
+  dependencies:
+    argparse "^1.0.7"
+    esprima "^4.0.0"
+
+js-yaml@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
+  integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
+  dependencies:
+    argparse "^2.0.1"
+
+jsesc@^3.0.2:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d"
+  integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==
+
+jsesc@~3.0.2:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.0.2.tgz#bb8b09a6597ba426425f2e4a07245c3d00b9343e"
+  integrity sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==
+
+json-buffer@3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13"
+  integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==
+
+json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1:
+  version "2.3.1"
+  resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
+  integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
+
+json-schema-traverse@^0.4.1:
+  version "0.4.1"
+  resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
+  integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+
+json-schema-traverse@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2"
+  integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
+
+json5@^2.1.2, json5@^2.2.3:
+  version "2.2.3"
+  resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
+  integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
+
+jsonfile@^6.0.1:
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
+  integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==
+  dependencies:
+    universalify "^2.0.0"
+  optionalDependencies:
+    graceful-fs "^4.1.6"
+
+katex@^0.16.9:
+  version "0.16.22"
+  resolved "https://registry.yarnpkg.com/katex/-/katex-0.16.22.tgz#d2b3d66464b1e6d69e6463b28a86ced5a02c5ccd"
+  integrity sha512-XCHRdUw4lf3SKBaJe4EvgqIuWwkPSo9XoeO8GjQW94Bp7TWv9hNhzZjZ+OH9yf1UmLygb7DIT5GSFQiyt16zYg==
+  dependencies:
+    commander "^8.3.0"
+
+keyv@^4.5.3:
+  version "4.5.4"
+  resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93"
+  integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==
+  dependencies:
+    json-buffer "3.0.1"
+
+khroma@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/khroma/-/khroma-2.1.0.tgz#45f2ce94ce231a437cf5b63c2e886e6eb42bbbb1"
+  integrity sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==
+
+kind-of@^6.0.0, kind-of@^6.0.2:
+  version "6.0.3"
+  resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
+  integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
+
+kleur@^3.0.3:
+  version "3.0.3"
+  resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e"
+  integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==
+
+kolorist@^1.8.0:
+  version "1.8.0"
+  resolved "https://registry.yarnpkg.com/kolorist/-/kolorist-1.8.0.tgz#edddbbbc7894bc13302cdf740af6374d4a04743c"
+  integrity sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==
+
+langium@3.3.1:
+  version "3.3.1"
+  resolved "https://registry.yarnpkg.com/langium/-/langium-3.3.1.tgz#da745a40d5ad8ee565090fed52eaee643be4e591"
+  integrity sha512-QJv/h939gDpvT+9SiLVlY7tZC3xB2qK57v0J04Sh9wpMb6MP1q8gB21L3WIo8T5P1MSMg3Ep14L7KkDCFG3y4w==
+  dependencies:
+    chevrotain "~11.0.3"
+    chevrotain-allstar "~0.3.0"
+    vscode-languageserver "~9.0.1"
+    vscode-languageserver-textdocument "~1.0.11"
+    vscode-uri "~3.0.8"
+
+latest-version@^7.0.0:
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-7.0.0.tgz#843201591ea81a4d404932eeb61240fe04e9e5da"
+  integrity sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==
+  dependencies:
+    package-json "^8.1.0"
+
+launch-editor@^2.6.1:
+  version "2.10.0"
+  resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.10.0.tgz#5ca3edfcb9667df1e8721310f3a40f1127d4bc42"
+  integrity sha512-D7dBRJo/qcGX9xlvt/6wUYzQxjh5G1RvZPgPv8vi4KRU99DVQL/oW7tnVOCCTm2HGeo3C5HvGE5Yrh6UBoZ0vA==
+  dependencies:
+    picocolors "^1.0.0"
+    shell-quote "^1.8.1"
+
+layout-base@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/layout-base/-/layout-base-1.0.2.tgz#1291e296883c322a9dd4c5dd82063721b53e26e2"
+  integrity sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==
+
+layout-base@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/layout-base/-/layout-base-2.0.1.tgz#d0337913586c90f9c2c075292069f5c2da5dd285"
+  integrity sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==
+
+leven@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2"
+  integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==
+
+lilconfig@^3.0.0, lilconfig@^3.1.1, lilconfig@^3.1.3:
+  version "3.1.3"
+  resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.3.tgz#a1bcfd6257f9585bf5ae14ceeebb7b559025e4c4"
+  integrity sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==
+
+lines-and-columns@^1.1.6:
+  version "1.2.4"
+  resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
+  integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
+
+loader-runner@^4.2.0:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1"
+  integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==
+
+loader-utils@^2.0.0:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c"
+  integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==
+  dependencies:
+    big.js "^5.2.2"
+    emojis-list "^3.0.0"
+    json5 "^2.1.2"
+
+local-pkg@^1.0.0:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-1.1.1.tgz#f5fe74a97a3bd3c165788ee08ca9fbe998dc58dd"
+  integrity sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==
+  dependencies:
+    mlly "^1.7.4"
+    pkg-types "^2.0.1"
+    quansync "^0.2.8"
+
+locate-path@^7.1.0:
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-7.2.0.tgz#69cb1779bd90b35ab1e771e1f2f89a202c2a8a8a"
+  integrity sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==
+  dependencies:
+    p-locate "^6.0.0"
+
+lodash-es@4.17.21, lodash-es@^4.17.21:
+  version "4.17.21"
+  resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee"
+  integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==
+
+lodash.debounce@^4.0.8:
+  version "4.0.8"
+  resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
+  integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==
+
+lodash.memoize@^4.1.2:
+  version "4.1.2"
+  resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
+  integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==
+
+lodash.uniq@^4.5.0:
+  version "4.5.0"
+  resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
+  integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==
+
+lodash@^4.17.20, lodash@^4.17.21:
+  version "4.17.21"
+  resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
+  integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
+
+longest-streak@^3.0.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-3.1.0.tgz#62fa67cd958742a1574af9f39866364102d90cd4"
+  integrity sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==
+
+loose-envify@^1.0.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
+  integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
+  dependencies:
+    js-tokens "^3.0.0 || ^4.0.0"
+
+lower-case@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28"
+  integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==
+  dependencies:
+    tslib "^2.0.3"
+
+lowercase-keys@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-3.0.0.tgz#c5e7d442e37ead247ae9db117a9d0a467c89d4f2"
+  integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==
+
+lru-cache@^10.2.0:
+  version "10.4.3"
+  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119"
+  integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==
+
+lru-cache@^5.1.1:
+  version "5.1.1"
+  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
+  integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
+  dependencies:
+    yallist "^3.0.2"
+
+make-error@^1.1.1:
+  version "1.3.6"
+  resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
+  integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
+
+markdown-extensions@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/markdown-extensions/-/markdown-extensions-2.0.0.tgz#34bebc83e9938cae16e0e017e4a9814a8330d3c4"
+  integrity sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==
+
+markdown-table@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-2.0.0.tgz#194a90ced26d31fe753d8b9434430214c011865b"
+  integrity sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==
+  dependencies:
+    repeat-string "^1.0.0"
+
+markdown-table@^3.0.0:
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-3.0.4.tgz#fe44d6d410ff9d6f2ea1797a3f60aa4d2b631c2a"
+  integrity sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==
+
+marked@^15.0.7:
+  version "15.0.12"
+  resolved "https://registry.yarnpkg.com/marked/-/marked-15.0.12.tgz#30722c7346e12d0a2d0207ab9b0c4f0102d86c4e"
+  integrity sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==
+
+math-intrinsics@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9"
+  integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==
+
+mdast-util-directive@^3.0.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/mdast-util-directive/-/mdast-util-directive-3.1.0.tgz#f3656f4aab6ae3767d3c72cfab5e8055572ccba1"
+  integrity sha512-I3fNFt+DHmpWCYAT7quoM6lHf9wuqtI+oCOfvILnoicNIqjh5E3dEJWiXuYME2gNe8vl1iMQwyUHa7bgFmak6Q==
+  dependencies:
+    "@types/mdast" "^4.0.0"
+    "@types/unist" "^3.0.0"
+    ccount "^2.0.0"
+    devlop "^1.0.0"
+    mdast-util-from-markdown "^2.0.0"
+    mdast-util-to-markdown "^2.0.0"
+    parse-entities "^4.0.0"
+    stringify-entities "^4.0.0"
+    unist-util-visit-parents "^6.0.0"
+
+mdast-util-find-and-replace@^3.0.0, mdast-util-find-and-replace@^3.0.1:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz#70a3174c894e14df722abf43bc250cbae44b11df"
+  integrity sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==
+  dependencies:
+    "@types/mdast" "^4.0.0"
+    escape-string-regexp "^5.0.0"
+    unist-util-is "^6.0.0"
+    unist-util-visit-parents "^6.0.0"
+
+mdast-util-from-markdown@^2.0.0:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz#4850390ca7cf17413a9b9a0fbefcd1bc0eb4160a"
+  integrity sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==
+  dependencies:
+    "@types/mdast" "^4.0.0"
+    "@types/unist" "^3.0.0"
+    decode-named-character-reference "^1.0.0"
+    devlop "^1.0.0"
+    mdast-util-to-string "^4.0.0"
+    micromark "^4.0.0"
+    micromark-util-decode-numeric-character-reference "^2.0.0"
+    micromark-util-decode-string "^2.0.0"
+    micromark-util-normalize-identifier "^2.0.0"
+    micromark-util-symbol "^2.0.0"
+    micromark-util-types "^2.0.0"
+    unist-util-stringify-position "^4.0.0"
+
+mdast-util-frontmatter@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz#f5f929eb1eb36c8a7737475c7eb438261f964ee8"
+  integrity sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==
+  dependencies:
+    "@types/mdast" "^4.0.0"
+    devlop "^1.0.0"
+    escape-string-regexp "^5.0.0"
+    mdast-util-from-markdown "^2.0.0"
+    mdast-util-to-markdown "^2.0.0"
+    micromark-extension-frontmatter "^2.0.0"
+
+mdast-util-gfm-autolink-literal@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz#abd557630337bd30a6d5a4bd8252e1c2dc0875d5"
+  integrity sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==
+  dependencies:
+    "@types/mdast" "^4.0.0"
+    ccount "^2.0.0"
+    devlop "^1.0.0"
+    mdast-util-find-and-replace "^3.0.0"
+    micromark-util-character "^2.0.0"
+
+mdast-util-gfm-footnote@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz#7778e9d9ca3df7238cc2bd3fa2b1bf6a65b19403"
+  integrity sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==
+  dependencies:
+    "@types/mdast" "^4.0.0"
+    devlop "^1.1.0"
+    mdast-util-from-markdown "^2.0.0"
+    mdast-util-to-markdown "^2.0.0"
+    micromark-util-normalize-identifier "^2.0.0"
+
+mdast-util-gfm-strikethrough@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz#d44ef9e8ed283ac8c1165ab0d0dfd058c2764c16"
+  integrity sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==
+  dependencies:
+    "@types/mdast" "^4.0.0"
+    mdast-util-from-markdown "^2.0.0"
+    mdast-util-to-markdown "^2.0.0"
+
+mdast-util-gfm-table@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz#7a435fb6223a72b0862b33afbd712b6dae878d38"
+  integrity sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==
+  dependencies:
+    "@types/mdast" "^4.0.0"
+    devlop "^1.0.0"
+    markdown-table "^3.0.0"
+    mdast-util-from-markdown "^2.0.0"
+    mdast-util-to-markdown "^2.0.0"
+
+mdast-util-gfm-task-list-item@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz#e68095d2f8a4303ef24094ab642e1047b991a936"
+  integrity sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==
+  dependencies:
+    "@types/mdast" "^4.0.0"
+    devlop "^1.0.0"
+    mdast-util-from-markdown "^2.0.0"
+    mdast-util-to-markdown "^2.0.0"
+
+mdast-util-gfm@^3.0.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz#2cdf63b92c2a331406b0fb0db4c077c1b0331751"
+  integrity sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==
+  dependencies:
+    mdast-util-from-markdown "^2.0.0"
+    mdast-util-gfm-autolink-literal "^2.0.0"
+    mdast-util-gfm-footnote "^2.0.0"
+    mdast-util-gfm-strikethrough "^2.0.0"
+    mdast-util-gfm-table "^2.0.0"
+    mdast-util-gfm-task-list-item "^2.0.0"
+    mdast-util-to-markdown "^2.0.0"
+
+mdast-util-mdx-expression@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz#43f0abac9adc756e2086f63822a38c8d3c3a5096"
+  integrity sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==
+  dependencies:
+    "@types/estree-jsx" "^1.0.0"
+    "@types/hast" "^3.0.0"
+    "@types/mdast" "^4.0.0"
+    devlop "^1.0.0"
+    mdast-util-from-markdown "^2.0.0"
+    mdast-util-to-markdown "^2.0.0"
+
+mdast-util-mdx-jsx@^3.0.0:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz#fd04c67a2a7499efb905a8a5c578dddc9fdada0d"
+  integrity sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==
+  dependencies:
+    "@types/estree-jsx" "^1.0.0"
+    "@types/hast" "^3.0.0"
+    "@types/mdast" "^4.0.0"
+    "@types/unist" "^3.0.0"
+    ccount "^2.0.0"
+    devlop "^1.1.0"
+    mdast-util-from-markdown "^2.0.0"
+    mdast-util-to-markdown "^2.0.0"
+    parse-entities "^4.0.0"
+    stringify-entities "^4.0.0"
+    unist-util-stringify-position "^4.0.0"
+    vfile-message "^4.0.0"
+
+mdast-util-mdx@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz#792f9cf0361b46bee1fdf1ef36beac424a099c41"
+  integrity sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==
+  dependencies:
+    mdast-util-from-markdown "^2.0.0"
+    mdast-util-mdx-expression "^2.0.0"
+    mdast-util-mdx-jsx "^3.0.0"
+    mdast-util-mdxjs-esm "^2.0.0"
+    mdast-util-to-markdown "^2.0.0"
+
+mdast-util-mdxjs-esm@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz#019cfbe757ad62dd557db35a695e7314bcc9fa97"
+  integrity sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==
+  dependencies:
+    "@types/estree-jsx" "^1.0.0"
+    "@types/hast" "^3.0.0"
+    "@types/mdast" "^4.0.0"
+    devlop "^1.0.0"
+    mdast-util-from-markdown "^2.0.0"
+    mdast-util-to-markdown "^2.0.0"
+
+mdast-util-phrasing@^4.0.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz#7cc0a8dec30eaf04b7b1a9661a92adb3382aa6e3"
+  integrity sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==
+  dependencies:
+    "@types/mdast" "^4.0.0"
+    unist-util-is "^6.0.0"
+
+mdast-util-to-hast@^13.0.0:
+  version "13.2.0"
+  resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz#5ca58e5b921cc0a3ded1bc02eed79a4fe4fe41f4"
+  integrity sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==
+  dependencies:
+    "@types/hast" "^3.0.0"
+    "@types/mdast" "^4.0.0"
+    "@ungap/structured-clone" "^1.0.0"
+    devlop "^1.0.0"
+    micromark-util-sanitize-uri "^2.0.0"
+    trim-lines "^3.0.0"
+    unist-util-position "^5.0.0"
+    unist-util-visit "^5.0.0"
+    vfile "^6.0.0"
+
+mdast-util-to-markdown@^2.0.0:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz#f910ffe60897f04bb4b7e7ee434486f76288361b"
+  integrity sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==
+  dependencies:
+    "@types/mdast" "^4.0.0"
+    "@types/unist" "^3.0.0"
+    longest-streak "^3.0.0"
+    mdast-util-phrasing "^4.0.0"
+    mdast-util-to-string "^4.0.0"
+    micromark-util-classify-character "^2.0.0"
+    micromark-util-decode-string "^2.0.0"
+    unist-util-visit "^5.0.0"
+    zwitch "^2.0.0"
+
+mdast-util-to-string@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz#7a5121475556a04e7eddeb67b264aae79d312814"
+  integrity sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==
+  dependencies:
+    "@types/mdast" "^4.0.0"
+
+mdn-data@2.0.28:
+  version "2.0.28"
+  resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.28.tgz#5ec48e7bef120654539069e1ae4ddc81ca490eba"
+  integrity sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==
+
+mdn-data@2.0.30:
+  version "2.0.30"
+  resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc"
+  integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==
+
+media-typer@0.3.0:
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
+  integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==
+
+memfs@^4.6.0:
+  version "4.17.2"
+  resolved "https://registry.yarnpkg.com/memfs/-/memfs-4.17.2.tgz#1f71a6d85c8c53b4f1b388234ed981a690c7e227"
+  integrity sha512-NgYhCOWgovOXSzvYgUW0LQ7Qy72rWQMGGFJDoWg4G30RHd3z77VbYdtJ4fembJXBy8pMIUA31XNAupobOQlwdg==
+  dependencies:
+    "@jsonjoy.com/json-pack" "^1.0.3"
+    "@jsonjoy.com/util" "^1.3.0"
+    tree-dump "^1.0.1"
+    tslib "^2.0.0"
+
+merge-descriptors@1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz#d80319a65f3c7935351e5cfdac8f9318504dbed5"
+  integrity sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==
+
+merge-stream@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
+  integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
+
+merge2@^1.3.0, merge2@^1.4.1:
+  version "1.4.1"
+  resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
+  integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
+
+mermaid@>=11.6.0:
+  version "11.7.0"
+  resolved "https://registry.yarnpkg.com/mermaid/-/mermaid-11.7.0.tgz#53f319147632db15e499c5ccb72b24b277a00bae"
+  integrity sha512-/1/5R0rt0Z1Ak0CuznAnCF3HtQgayRXUz6SguzOwN4L+DuCobz0UxnQ+ZdTSZ3AugKVVh78tiVmsHpHWV25TCw==
+  dependencies:
+    "@braintree/sanitize-url" "^7.0.4"
+    "@iconify/utils" "^2.1.33"
+    "@mermaid-js/parser" "^0.5.0"
+    "@types/d3" "^7.4.3"
+    cytoscape "^3.29.3"
+    cytoscape-cose-bilkent "^4.1.0"
+    cytoscape-fcose "^2.2.0"
+    d3 "^7.9.0"
+    d3-sankey "^0.12.3"
+    dagre-d3-es "7.0.11"
+    dayjs "^1.11.13"
+    dompurify "^3.2.5"
+    katex "^0.16.9"
+    khroma "^2.1.0"
+    lodash-es "^4.17.21"
+    marked "^15.0.7"
+    roughjs "^4.6.6"
+    stylis "^4.3.6"
+    ts-dedent "^2.2.0"
+    uuid "^11.1.0"
+
+methods@~1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
+  integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==
+
+micromark-core-commonmark@^2.0.0:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz#c691630e485021a68cf28dbc2b2ca27ebf678cd4"
+  integrity sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==
+  dependencies:
+    decode-named-character-reference "^1.0.0"
+    devlop "^1.0.0"
+    micromark-factory-destination "^2.0.0"
+    micromark-factory-label "^2.0.0"
+    micromark-factory-space "^2.0.0"
+    micromark-factory-title "^2.0.0"
+    micromark-factory-whitespace "^2.0.0"
+    micromark-util-character "^2.0.0"
+    micromark-util-chunked "^2.0.0"
+    micromark-util-classify-character "^2.0.0"
+    micromark-util-html-tag-name "^2.0.0"
+    micromark-util-normalize-identifier "^2.0.0"
+    micromark-util-resolve-all "^2.0.0"
+    micromark-util-subtokenize "^2.0.0"
+    micromark-util-symbol "^2.0.0"
+    micromark-util-types "^2.0.0"
+
+micromark-extension-directive@^3.0.0:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/micromark-extension-directive/-/micromark-extension-directive-3.0.2.tgz#2eb61985d1995a7c1ff7621676a4f32af29409e8"
+  integrity sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA==
+  dependencies:
+    devlop "^1.0.0"
+    micromark-factory-space "^2.0.0"
+    micromark-factory-whitespace "^2.0.0"
+    micromark-util-character "^2.0.0"
+    micromark-util-symbol "^2.0.0"
+    micromark-util-types "^2.0.0"
+    parse-entities "^4.0.0"
+
+micromark-extension-frontmatter@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/micromark-extension-frontmatter/-/micromark-extension-frontmatter-2.0.0.tgz#651c52ffa5d7a8eeed687c513cd869885882d67a"
+  integrity sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==
+  dependencies:
+    fault "^2.0.0"
+    micromark-util-character "^2.0.0"
+    micromark-util-symbol "^2.0.0"
+    micromark-util-types "^2.0.0"
+
+micromark-extension-gfm-autolink-literal@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz#6286aee9686c4462c1e3552a9d505feddceeb935"
+  integrity sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==
+  dependencies:
+    micromark-util-character "^2.0.0"
+    micromark-util-sanitize-uri "^2.0.0"
+    micromark-util-symbol "^2.0.0"
+    micromark-util-types "^2.0.0"
+
+micromark-extension-gfm-footnote@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz#4dab56d4e398b9853f6fe4efac4fc9361f3e0750"
+  integrity sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==
+  dependencies:
+    devlop "^1.0.0"
+    micromark-core-commonmark "^2.0.0"
+    micromark-factory-space "^2.0.0"
+    micromark-util-character "^2.0.0"
+    micromark-util-normalize-identifier "^2.0.0"
+    micromark-util-sanitize-uri "^2.0.0"
+    micromark-util-symbol "^2.0.0"
+    micromark-util-types "^2.0.0"
+
+micromark-extension-gfm-strikethrough@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz#86106df8b3a692b5f6a92280d3879be6be46d923"
+  integrity sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==
+  dependencies:
+    devlop "^1.0.0"
+    micromark-util-chunked "^2.0.0"
+    micromark-util-classify-character "^2.0.0"
+    micromark-util-resolve-all "^2.0.0"
+    micromark-util-symbol "^2.0.0"
+    micromark-util-types "^2.0.0"
+
+micromark-extension-gfm-table@^2.0.0:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz#fac70bcbf51fe65f5f44033118d39be8a9b5940b"
+  integrity sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==
+  dependencies:
+    devlop "^1.0.0"
+    micromark-factory-space "^2.0.0"
+    micromark-util-character "^2.0.0"
+    micromark-util-symbol "^2.0.0"
+    micromark-util-types "^2.0.0"
+
+micromark-extension-gfm-tagfilter@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz#f26d8a7807b5985fba13cf61465b58ca5ff7dc57"
+  integrity sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==
+  dependencies:
+    micromark-util-types "^2.0.0"
+
+micromark-extension-gfm-task-list-item@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz#bcc34d805639829990ec175c3eea12bb5b781f2c"
+  integrity sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==
+  dependencies:
+    devlop "^1.0.0"
+    micromark-factory-space "^2.0.0"
+    micromark-util-character "^2.0.0"
+    micromark-util-symbol "^2.0.0"
+    micromark-util-types "^2.0.0"
+
+micromark-extension-gfm@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz#3e13376ab95dd7a5cfd0e29560dfe999657b3c5b"
+  integrity sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==
+  dependencies:
+    micromark-extension-gfm-autolink-literal "^2.0.0"
+    micromark-extension-gfm-footnote "^2.0.0"
+    micromark-extension-gfm-strikethrough "^2.0.0"
+    micromark-extension-gfm-table "^2.0.0"
+    micromark-extension-gfm-tagfilter "^2.0.0"
+    micromark-extension-gfm-task-list-item "^2.0.0"
+    micromark-util-combine-extensions "^2.0.0"
+    micromark-util-types "^2.0.0"
+
+micromark-extension-mdx-expression@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.1.tgz#43d058d999532fb3041195a3c3c05c46fa84543b"
+  integrity sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==
+  dependencies:
+    "@types/estree" "^1.0.0"
+    devlop "^1.0.0"
+    micromark-factory-mdx-expression "^2.0.0"
+    micromark-factory-space "^2.0.0"
+    micromark-util-character "^2.0.0"
+    micromark-util-events-to-acorn "^2.0.0"
+    micromark-util-symbol "^2.0.0"
+    micromark-util-types "^2.0.0"
+
+micromark-extension-mdx-jsx@^3.0.0:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.2.tgz#ffc98bdb649798902fa9fc5689f67f9c1c902044"
+  integrity sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==
+  dependencies:
+    "@types/estree" "^1.0.0"
+    devlop "^1.0.0"
+    estree-util-is-identifier-name "^3.0.0"
+    micromark-factory-mdx-expression "^2.0.0"
+    micromark-factory-space "^2.0.0"
+    micromark-util-character "^2.0.0"
+    micromark-util-events-to-acorn "^2.0.0"
+    micromark-util-symbol "^2.0.0"
+    micromark-util-types "^2.0.0"
+    vfile-message "^4.0.0"
+
+micromark-extension-mdx-md@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz#1d252881ea35d74698423ab44917e1f5b197b92d"
+  integrity sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==
+  dependencies:
+    micromark-util-types "^2.0.0"
+
+micromark-extension-mdxjs-esm@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz#de21b2b045fd2059bd00d36746081de38390d54a"
+  integrity sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==
+  dependencies:
+    "@types/estree" "^1.0.0"
+    devlop "^1.0.0"
+    micromark-core-commonmark "^2.0.0"
+    micromark-util-character "^2.0.0"
+    micromark-util-events-to-acorn "^2.0.0"
+    micromark-util-symbol "^2.0.0"
+    micromark-util-types "^2.0.0"
+    unist-util-position-from-estree "^2.0.0"
+    vfile-message "^4.0.0"
+
+micromark-extension-mdxjs@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz#b5a2e0ed449288f3f6f6c544358159557549de18"
+  integrity sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==
+  dependencies:
+    acorn "^8.0.0"
+    acorn-jsx "^5.0.0"
+    micromark-extension-mdx-expression "^3.0.0"
+    micromark-extension-mdx-jsx "^3.0.0"
+    micromark-extension-mdx-md "^2.0.0"
+    micromark-extension-mdxjs-esm "^3.0.0"
+    micromark-util-combine-extensions "^2.0.0"
+    micromark-util-types "^2.0.0"
+
+micromark-factory-destination@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz#8fef8e0f7081f0474fbdd92deb50c990a0264639"
+  integrity sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==
+  dependencies:
+    micromark-util-character "^2.0.0"
+    micromark-util-symbol "^2.0.0"
+    micromark-util-types "^2.0.0"
+
+micromark-factory-label@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz#5267efa97f1e5254efc7f20b459a38cb21058ba1"
+  integrity sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==
+  dependencies:
+    devlop "^1.0.0"
+    micromark-util-character "^2.0.0"
+    micromark-util-symbol "^2.0.0"
+    micromark-util-types "^2.0.0"
+
+micromark-factory-mdx-expression@^2.0.0:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.3.tgz#bb09988610589c07d1c1e4425285895041b3dfa9"
+  integrity sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==
+  dependencies:
+    "@types/estree" "^1.0.0"
+    devlop "^1.0.0"
+    micromark-factory-space "^2.0.0"
+    micromark-util-character "^2.0.0"
+    micromark-util-events-to-acorn "^2.0.0"
+    micromark-util-symbol "^2.0.0"
+    micromark-util-types "^2.0.0"
+    unist-util-position-from-estree "^2.0.0"
+    vfile-message "^4.0.0"
+
+micromark-factory-space@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz#c8f40b0640a0150751d3345ed885a080b0d15faf"
+  integrity sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==
+  dependencies:
+    micromark-util-character "^1.0.0"
+    micromark-util-types "^1.0.0"
+
+micromark-factory-space@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz#36d0212e962b2b3121f8525fc7a3c7c029f334fc"
+  integrity sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==
+  dependencies:
+    micromark-util-character "^2.0.0"
+    micromark-util-types "^2.0.0"
+
+micromark-factory-title@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz#237e4aa5d58a95863f01032d9ee9b090f1de6e94"
+  integrity sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==
+  dependencies:
+    micromark-factory-space "^2.0.0"
+    micromark-util-character "^2.0.0"
+    micromark-util-symbol "^2.0.0"
+    micromark-util-types "^2.0.0"
+
+micromark-factory-whitespace@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz#06b26b2983c4d27bfcc657b33e25134d4868b0b1"
+  integrity sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==
+  dependencies:
+    micromark-factory-space "^2.0.0"
+    micromark-util-character "^2.0.0"
+    micromark-util-symbol "^2.0.0"
+    micromark-util-types "^2.0.0"
+
+micromark-util-character@^1.0.0, micromark-util-character@^1.1.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-1.2.0.tgz#4fedaa3646db249bc58caeb000eb3549a8ca5dcc"
+  integrity sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==
+  dependencies:
+    micromark-util-symbol "^1.0.0"
+    micromark-util-types "^1.0.0"
+
+micromark-util-character@^2.0.0:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-2.1.1.tgz#2f987831a40d4c510ac261e89852c4e9703ccda6"
+  integrity sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==
+  dependencies:
+    micromark-util-symbol "^2.0.0"
+    micromark-util-types "^2.0.0"
+
+micromark-util-chunked@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz#47fbcd93471a3fccab86cff03847fc3552db1051"
+  integrity sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==
+  dependencies:
+    micromark-util-symbol "^2.0.0"
+
+micromark-util-classify-character@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz#d399faf9c45ca14c8b4be98b1ea481bced87b629"
+  integrity sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==
+  dependencies:
+    micromark-util-character "^2.0.0"
+    micromark-util-symbol "^2.0.0"
+    micromark-util-types "^2.0.0"
+
+micromark-util-combine-extensions@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz#2a0f490ab08bff5cc2fd5eec6dd0ca04f89b30a9"
+  integrity sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==
+  dependencies:
+    micromark-util-chunked "^2.0.0"
+    micromark-util-types "^2.0.0"
+
+micromark-util-decode-numeric-character-reference@^2.0.0:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz#fcf15b660979388e6f118cdb6bf7d79d73d26fe5"
+  integrity sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==
+  dependencies:
+    micromark-util-symbol "^2.0.0"
+
+micromark-util-decode-string@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz#6cb99582e5d271e84efca8e61a807994d7161eb2"
+  integrity sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==
+  dependencies:
+    decode-named-character-reference "^1.0.0"
+    micromark-util-character "^2.0.0"
+    micromark-util-decode-numeric-character-reference "^2.0.0"
+    micromark-util-symbol "^2.0.0"
+
+micromark-util-encode@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz#0d51d1c095551cfaac368326963cf55f15f540b8"
+  integrity sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==
+
+micromark-util-events-to-acorn@^2.0.0:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.3.tgz#e7a8a6b55a47e5a06c720d5a1c4abae8c37c98f3"
+  integrity sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==
+  dependencies:
+    "@types/estree" "^1.0.0"
+    "@types/unist" "^3.0.0"
+    devlop "^1.0.0"
+    estree-util-visit "^2.0.0"
+    micromark-util-symbol "^2.0.0"
+    micromark-util-types "^2.0.0"
+    vfile-message "^4.0.0"
+
+micromark-util-html-tag-name@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz#e40403096481986b41c106627f98f72d4d10b825"
+  integrity sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==
+
+micromark-util-normalize-identifier@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz#c30d77b2e832acf6526f8bf1aa47bc9c9438c16d"
+  integrity sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==
+  dependencies:
+    micromark-util-symbol "^2.0.0"
+
+micromark-util-resolve-all@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz#e1a2d62cdd237230a2ae11839027b19381e31e8b"
+  integrity sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==
+  dependencies:
+    micromark-util-types "^2.0.0"
+
+micromark-util-sanitize-uri@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz#ab89789b818a58752b73d6b55238621b7faa8fd7"
+  integrity sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==
+  dependencies:
+    micromark-util-character "^2.0.0"
+    micromark-util-encode "^2.0.0"
+    micromark-util-symbol "^2.0.0"
+
+micromark-util-subtokenize@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz#d8ade5ba0f3197a1cf6a2999fbbfe6357a1a19ee"
+  integrity sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==
+  dependencies:
+    devlop "^1.0.0"
+    micromark-util-chunked "^2.0.0"
+    micromark-util-symbol "^2.0.0"
+    micromark-util-types "^2.0.0"
+
+micromark-util-symbol@^1.0.0, micromark-util-symbol@^1.0.1:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz#813cd17837bdb912d069a12ebe3a44b6f7063142"
+  integrity sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==
+
+micromark-util-symbol@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz#e5da494e8eb2b071a0d08fb34f6cefec6c0a19b8"
+  integrity sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==
+
+micromark-util-types@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-1.1.0.tgz#e6676a8cae0bb86a2171c498167971886cb7e283"
+  integrity sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==
+
+micromark-util-types@^2.0.0:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-2.0.2.tgz#f00225f5f5a0ebc3254f96c36b6605c4b393908e"
+  integrity sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==
+
+micromark@^4.0.0:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/micromark/-/micromark-4.0.2.tgz#91395a3e1884a198e62116e33c9c568e39936fdb"
+  integrity sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==
+  dependencies:
+    "@types/debug" "^4.0.0"
+    debug "^4.0.0"
+    decode-named-character-reference "^1.0.0"
+    devlop "^1.0.0"
+    micromark-core-commonmark "^2.0.0"
+    micromark-factory-space "^2.0.0"
+    micromark-util-character "^2.0.0"
+    micromark-util-chunked "^2.0.0"
+    micromark-util-combine-extensions "^2.0.0"
+    micromark-util-decode-numeric-character-reference "^2.0.0"
+    micromark-util-encode "^2.0.0"
+    micromark-util-normalize-identifier "^2.0.0"
+    micromark-util-resolve-all "^2.0.0"
+    micromark-util-sanitize-uri "^2.0.0"
+    micromark-util-subtokenize "^2.0.0"
+    micromark-util-symbol "^2.0.0"
+    micromark-util-types "^2.0.0"
+
+micromatch@^4.0.2, micromatch@^4.0.5, micromatch@^4.0.8:
+  version "4.0.8"
+  resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202"
+  integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==
+  dependencies:
+    braces "^3.0.3"
+    picomatch "^2.3.1"
+
+mime-db@1.52.0:
+  version "1.52.0"
+  resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
+  integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
+
+"mime-db@>= 1.43.0 < 2":
+  version "1.54.0"
+  resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.54.0.tgz#cddb3ee4f9c64530dff640236661d42cb6a314f5"
+  integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==
+
+mime-db@~1.33.0:
+  version "1.33.0"
+  resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db"
+  integrity sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==
+
+mime-types@2.1.18:
+  version "2.1.18"
+  resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8"
+  integrity sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==
+  dependencies:
+    mime-db "~1.33.0"
+
+mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34:
+  version "2.1.35"
+  resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
+  integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
+  dependencies:
+    mime-db "1.52.0"
+
+mime@1.6.0:
+  version "1.6.0"
+  resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
+  integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
+
+mimic-fn@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
+  integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
+
+mimic-response@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9"
+  integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==
+
+mimic-response@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-4.0.0.tgz#35468b19e7c75d10f5165ea25e75a5ceea7cf70f"
+  integrity sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==
+
+mini-css-extract-plugin@^2.9.2:
+  version "2.9.2"
+  resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz#966031b468917a5446f4c24a80854b2947503c5b"
+  integrity sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==
+  dependencies:
+    schema-utils "^4.0.0"
+    tapable "^2.2.1"
+
+minimalistic-assert@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
+  integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
+
+minimatch@3.1.2:
+  version "3.1.2"
+  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
+  integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
+  dependencies:
+    brace-expansion "^1.1.7"
+
+minimatch@^9.0.4:
+  version "9.0.5"
+  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5"
+  integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==
+  dependencies:
+    brace-expansion "^2.0.1"
+
+minimist@^1.2.0:
+  version "1.2.8"
+  resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
+  integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
+
+"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2:
+  version "7.1.2"
+  resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707"
+  integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==
+
+mlly@^1.7.4:
+  version "1.7.4"
+  resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.7.4.tgz#3d7295ea2358ec7a271eaa5d000a0f84febe100f"
+  integrity sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==
+  dependencies:
+    acorn "^8.14.0"
+    pathe "^2.0.1"
+    pkg-types "^1.3.0"
+    ufo "^1.5.4"
+
+motion-dom@^12.18.1:
+  version "12.18.1"
+  resolved "https://registry.yarnpkg.com/motion-dom/-/motion-dom-12.18.1.tgz#3a4d6b7f4a7940393ffdd60ec44f636d3472948f"
+  integrity sha512-dR/4EYT23Snd+eUSLrde63Ws3oXQtJNw/krgautvTfwrN/2cHfCZMdu6CeTxVfRRWREW3Fy1f5vobRDiBb/q+w==
+  dependencies:
+    motion-utils "^12.18.1"
+
+motion-utils@^12.18.1:
+  version "12.18.1"
+  resolved "https://registry.yarnpkg.com/motion-utils/-/motion-utils-12.18.1.tgz#d7543c2bc15e843286cbb86119f011da0a78515b"
+  integrity sha512-az26YDU4WoDP0ueAkUtABLk2BIxe28d8NH1qWT8jPGhPyf44XTdDUh8pDk9OPphaSrR9McgpcJlgwSOIw/sfkA==
+
+motion@^12.10.0:
+  version "12.18.1"
+  resolved "https://registry.yarnpkg.com/motion/-/motion-12.18.1.tgz#25dec7578a3c8b27058128ea9dfc60337db6aeb5"
+  integrity sha512-w1ns2hWQ4COhOvnZf4rg4mW0Pl36mzcShpgt0fSfI6qJxKUbi3kHho/HSKeJFRoY0TO1m5/7C8lG1+Li0uC9Fw==
+  dependencies:
+    framer-motion "^12.18.1"
+    tslib "^2.4.0"
+
+mrmime@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-2.0.1.tgz#bc3e87f7987853a54c9850eeb1f1078cd44adddc"
+  integrity sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==
+
+ms@2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+  integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==
+
+ms@2.1.3, ms@^2.1.3:
+  version "2.1.3"
+  resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
+  integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
+
+multicast-dns@^7.2.5:
+  version "7.2.5"
+  resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.5.tgz#77eb46057f4d7adbd16d9290fa7299f6fa64cced"
+  integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==
+  dependencies:
+    dns-packet "^5.2.2"
+    thunky "^1.0.2"
+
+mz@^2.7.0:
+  version "2.7.0"
+  resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32"
+  integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==
+  dependencies:
+    any-promise "^1.0.0"
+    object-assign "^4.0.1"
+    thenify-all "^1.0.0"
+
+nanoid@^3.3.11:
+  version "3.3.11"
+  resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b"
+  integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==
+
+negotiator@0.6.3:
+  version "0.6.3"
+  resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd"
+  integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==
+
+negotiator@~0.6.4:
+  version "0.6.4"
+  resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.4.tgz#777948e2452651c570b712dd01c23e262713fff7"
+  integrity sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==
+
+neo-async@^2.6.2:
+  version "2.6.2"
+  resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
+  integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
+
+no-case@^3.0.4:
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d"
+  integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==
+  dependencies:
+    lower-case "^2.0.2"
+    tslib "^2.0.3"
+
+node-addon-api@^7.0.0:
+  version "7.1.1"
+  resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-7.1.1.tgz#1aba6693b0f255258a049d621329329322aad558"
+  integrity sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==
+
+node-emoji@^2.1.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-2.2.0.tgz#1d000e3c76e462577895be1b436f4aa2d6760eb0"
+  integrity sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==
+  dependencies:
+    "@sindresorhus/is" "^4.6.0"
+    char-regex "^1.0.2"
+    emojilib "^2.4.0"
+    skin-tone "^2.0.0"
+
+node-forge@^1:
+  version "1.3.1"
+  resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3"
+  integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==
+
+node-releases@^2.0.19:
+  version "2.0.19"
+  resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314"
+  integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==
+
+normalize-path@^3.0.0, normalize-path@~3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
+  integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+
+normalize-range@^0.1.2:
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
+  integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==
+
+normalize-url@^8.0.0:
+  version "8.0.2"
+  resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-8.0.2.tgz#3b343a42f837e4dae2b01917c04e8de3782e9170"
+  integrity sha512-Ee/R3SyN4BuynXcnTaekmaVdbDAEiNrHqjQIA37mHU8G9pf7aaAD4ZX3XjBLo6rsdcxA/gtkcNYZLt30ACgynw==
+
+npm-run-path@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
+  integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
+  dependencies:
+    path-key "^3.0.0"
+
+nprogress@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1"
+  integrity sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==
+
+nth-check@^2.0.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d"
+  integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==
+  dependencies:
+    boolbase "^1.0.0"
+
+null-loader@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/null-loader/-/null-loader-4.0.1.tgz#8e63bd3a2dd3c64236a4679428632edd0a6dbc6a"
+  integrity sha512-pxqVbi4U6N26lq+LmgIbB5XATP0VdZKOG25DhHi8btMmJJefGArFyDg1yc4U3hWCJbMqSrw0qyrz1UQX+qYXqg==
+  dependencies:
+    loader-utils "^2.0.0"
+    schema-utils "^3.0.0"
+
+object-assign@^4.0.1, object-assign@^4.1.1:
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+  integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
+
+object-hash@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9"
+  integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==
+
+object-inspect@^1.13.3:
+  version "1.13.4"
+  resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213"
+  integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==
+
+object-keys@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
+  integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
+
+object.assign@^4.1.0:
+  version "4.1.7"
+  resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.7.tgz#8c14ca1a424c6a561b0bb2a22f66f5049a945d3d"
+  integrity sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==
+  dependencies:
+    call-bind "^1.0.8"
+    call-bound "^1.0.3"
+    define-properties "^1.2.1"
+    es-object-atoms "^1.0.0"
+    has-symbols "^1.1.0"
+    object-keys "^1.1.1"
+
+obuf@^1.0.0, obuf@^1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e"
+  integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==
+
+on-finished@2.4.1, on-finished@^2.4.1:
+  version "2.4.1"
+  resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f"
+  integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==
+  dependencies:
+    ee-first "1.1.1"
+
+on-headers@~1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f"
+  integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==
+
+onetime@^5.1.2:
+  version "5.1.2"
+  resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
+  integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
+  dependencies:
+    mimic-fn "^2.1.0"
+
+open@^10.0.3:
+  version "10.1.2"
+  resolved "https://registry.yarnpkg.com/open/-/open-10.1.2.tgz#d5df40984755c9a9c3c93df8156a12467e882925"
+  integrity sha512-cxN6aIDPz6rm8hbebcP7vrQNhvRcveZoJU72Y7vskh4oIm+BZwBECnx5nTmrlres1Qapvx27Qo1Auukpf8PKXw==
+  dependencies:
+    default-browser "^5.2.1"
+    define-lazy-prop "^3.0.0"
+    is-inside-container "^1.0.0"
+    is-wsl "^3.1.0"
+
+open@^8.4.0:
+  version "8.4.2"
+  resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9"
+  integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==
+  dependencies:
+    define-lazy-prop "^2.0.0"
+    is-docker "^2.1.1"
+    is-wsl "^2.2.0"
+
+opener@^1.5.2:
+  version "1.5.2"
+  resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598"
+  integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==
+
+p-cancelable@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-3.0.0.tgz#63826694b54d61ca1c20ebcb6d3ecf5e14cd8050"
+  integrity sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==
+
+p-finally@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
+  integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==
+
+p-limit@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644"
+  integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==
+  dependencies:
+    yocto-queue "^1.0.0"
+
+p-locate@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-6.0.0.tgz#3da9a49d4934b901089dca3302fa65dc5a05c04f"
+  integrity sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==
+  dependencies:
+    p-limit "^4.0.0"
+
+p-map@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b"
+  integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==
+  dependencies:
+    aggregate-error "^3.0.0"
+
+p-queue@^6.6.2:
+  version "6.6.2"
+  resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-6.6.2.tgz#2068a9dcf8e67dd0ec3e7a2bcb76810faa85e426"
+  integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==
+  dependencies:
+    eventemitter3 "^4.0.4"
+    p-timeout "^3.2.0"
+
+p-retry@^6.2.0:
+  version "6.2.1"
+  resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-6.2.1.tgz#81828f8dc61c6ef5a800585491572cc9892703af"
+  integrity sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==
+  dependencies:
+    "@types/retry" "0.12.2"
+    is-network-error "^1.0.0"
+    retry "^0.13.1"
+
+p-timeout@^3.2.0:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe"
+  integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==
+  dependencies:
+    p-finally "^1.0.0"
+
+package-json-from-dist@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505"
+  integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==
+
+package-json@^8.1.0:
+  version "8.1.1"
+  resolved "https://registry.yarnpkg.com/package-json/-/package-json-8.1.1.tgz#3e9948e43df40d1e8e78a85485f1070bf8f03dc8"
+  integrity sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==
+  dependencies:
+    got "^12.1.0"
+    registry-auth-token "^5.0.1"
+    registry-url "^6.0.0"
+    semver "^7.3.7"
+
+package-manager-detector@^1.3.0:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/package-manager-detector/-/package-manager-detector-1.3.0.tgz#b42d641c448826e03c2b354272456a771ce453c0"
+  integrity sha512-ZsEbbZORsyHuO00lY1kV3/t72yp6Ysay6Pd17ZAlNGuGwmWDLCJxFpRs0IzfXfj1o4icJOkUEioexFHzyPurSQ==
+
+param-case@^3.0.4:
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5"
+  integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==
+  dependencies:
+    dot-case "^3.0.4"
+    tslib "^2.0.3"
+
+parent-module@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
+  integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
+  dependencies:
+    callsites "^3.0.0"
+
+parse-entities@^4.0.0:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-4.0.2.tgz#61d46f5ed28e4ee62e9ddc43d6b010188443f159"
+  integrity sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==
+  dependencies:
+    "@types/unist" "^2.0.0"
+    character-entities-legacy "^3.0.0"
+    character-reference-invalid "^2.0.0"
+    decode-named-character-reference "^1.0.0"
+    is-alphanumerical "^2.0.0"
+    is-decimal "^2.0.0"
+    is-hexadecimal "^2.0.0"
+
+parse-json@^5.2.0:
+  version "5.2.0"
+  resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd"
+  integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==
+  dependencies:
+    "@babel/code-frame" "^7.0.0"
+    error-ex "^1.3.1"
+    json-parse-even-better-errors "^2.3.0"
+    lines-and-columns "^1.1.6"
+
+parse-ms@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-2.1.0.tgz#348565a753d4391fa524029956b172cb7753097d"
+  integrity sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==
+
+parse-numeric-range@^1.3.0:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz#7c63b61190d61e4d53a1197f0c83c47bb670ffa3"
+  integrity sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==
+
+parse5-htmlparser2-tree-adapter@^7.0.0:
+  version "7.1.0"
+  resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz#b5a806548ed893a43e24ccb42fbb78069311e81b"
+  integrity sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==
+  dependencies:
+    domhandler "^5.0.3"
+    parse5 "^7.0.0"
+
+parse5@^7.0.0:
+  version "7.3.0"
+  resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.3.0.tgz#d7e224fa72399c7a175099f45fc2ad024b05ec05"
+  integrity sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==
+  dependencies:
+    entities "^6.0.0"
+
+parseurl@~1.3.2, parseurl@~1.3.3:
+  version "1.3.3"
+  resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
+  integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
+
+pascal-case@^3.1.2:
+  version "3.1.2"
+  resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb"
+  integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==
+  dependencies:
+    no-case "^3.0.4"
+    tslib "^2.0.3"
+
+path-data-parser@0.1.0, path-data-parser@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/path-data-parser/-/path-data-parser-0.1.0.tgz#8f5ba5cc70fc7becb3dcefaea08e2659aba60b8c"
+  integrity sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==
+
+path-exists@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-5.0.0.tgz#a6aad9489200b21fab31e49cf09277e5116fb9e7"
+  integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==
+
+path-is-inside@1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
+  integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==
+
+path-key@^3.0.0, path-key@^3.1.0:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
+  integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
+
+path-parse@^1.0.7:
+  version "1.0.7"
+  resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
+  integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
+
+path-scurry@^1.11.1:
+  version "1.11.1"
+  resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2"
+  integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==
+  dependencies:
+    lru-cache "^10.2.0"
+    minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
+
+path-to-regexp@0.1.12:
+  version "0.1.12"
+  resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.12.tgz#d5e1a12e478a976d432ef3c58d534b9923164bb7"
+  integrity sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==
+
+path-to-regexp@3.3.0:
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-3.3.0.tgz#f7f31d32e8518c2660862b644414b6d5c63a611b"
+  integrity sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==
+
+path-to-regexp@^1.7.0:
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.9.0.tgz#5dc0753acbf8521ca2e0f137b4578b917b10cf24"
+  integrity sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==
+  dependencies:
+    isarray "0.0.1"
+
+path-type@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
+  integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
+
+pathe@^2.0.1, pathe@^2.0.3:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/pathe/-/pathe-2.0.3.tgz#3ecbec55421685b70a9da872b2cff3e1cbed1716"
+  integrity sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==
+
+picocolors@^1.0.0, picocolors@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b"
+  integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==
+
+picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1:
+  version "2.3.1"
+  resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
+  integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
+
+pify@^2.3.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+  integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==
+
+pirates@^4.0.1:
+  version "4.0.7"
+  resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.7.tgz#643b4a18c4257c8a65104b73f3049ce9a0a15e22"
+  integrity sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==
+
+pkg-dir@^7.0.0:
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-7.0.0.tgz#8f0c08d6df4476756c5ff29b3282d0bab7517d11"
+  integrity sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==
+  dependencies:
+    find-up "^6.3.0"
+
+pkg-types@^1.3.0:
+  version "1.3.1"
+  resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.3.1.tgz#bd7cc70881192777eef5326c19deb46e890917df"
+  integrity sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==
+  dependencies:
+    confbox "^0.1.8"
+    mlly "^1.7.4"
+    pathe "^2.0.1"
+
+pkg-types@^2.0.1:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-2.1.0.tgz#70c9e1b9c74b63fdde749876ee0aa007ea9edead"
+  integrity sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==
+  dependencies:
+    confbox "^0.2.1"
+    exsolve "^1.0.1"
+    pathe "^2.0.3"
+
+points-on-curve@0.2.0, points-on-curve@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/points-on-curve/-/points-on-curve-0.2.0.tgz#7dbb98c43791859434284761330fa893cb81b4d1"
+  integrity sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==
+
+points-on-path@^0.2.1:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/points-on-path/-/points-on-path-0.2.1.tgz#553202b5424c53bed37135b318858eacff85dd52"
+  integrity sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==
+  dependencies:
+    path-data-parser "0.1.0"
+    points-on-curve "0.2.0"
+
+postcss-attribute-case-insensitive@^7.0.1:
+  version "7.0.1"
+  resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-7.0.1.tgz#0c4500e3bcb2141848e89382c05b5a31c23033a3"
+  integrity sha512-Uai+SupNSqzlschRyNx3kbCTWgY/2hcwtHEI/ej2LJWc9JJ77qKgGptd8DHwY1mXtZ7Aoh4z4yxfwMBue9eNgw==
+  dependencies:
+    postcss-selector-parser "^7.0.0"
+
+postcss-calc@^9.0.1:
+  version "9.0.1"
+  resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-9.0.1.tgz#a744fd592438a93d6de0f1434c572670361eb6c6"
+  integrity sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==
+  dependencies:
+    postcss-selector-parser "^6.0.11"
+    postcss-value-parser "^4.2.0"
+
+postcss-clamp@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/postcss-clamp/-/postcss-clamp-4.1.0.tgz#7263e95abadd8c2ba1bd911b0b5a5c9c93e02363"
+  integrity sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+postcss-color-functional-notation@^7.0.10:
+  version "7.0.10"
+  resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-7.0.10.tgz#f1e9c3e4371889dcdfeabfa8515464fd8338cedc"
+  integrity sha512-k9qX+aXHBiLTRrWoCJuUFI6F1iF6QJQUXNVWJVSbqZgj57jDhBlOvD8gNUGl35tgqDivbGLhZeW3Ongz4feuKA==
+  dependencies:
+    "@csstools/css-color-parser" "^3.0.10"
+    "@csstools/css-parser-algorithms" "^3.0.5"
+    "@csstools/css-tokenizer" "^3.0.4"
+    "@csstools/postcss-progressive-custom-properties" "^4.1.0"
+    "@csstools/utilities" "^2.0.0"
+
+postcss-color-hex-alpha@^10.0.0:
+  version "10.0.0"
+  resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-10.0.0.tgz#5dd3eba1f8facb4ea306cba6e3f7712e876b0c76"
+  integrity sha512-1kervM2cnlgPs2a8Vt/Qbe5cQ++N7rkYo/2rz2BkqJZIHQwaVuJgQH38REHrAi4uM0b1fqxMkWYmese94iMp3w==
+  dependencies:
+    "@csstools/utilities" "^2.0.0"
+    postcss-value-parser "^4.2.0"
+
+postcss-color-rebeccapurple@^10.0.0:
+  version "10.0.0"
+  resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-10.0.0.tgz#5ada28406ac47e0796dff4056b0a9d5a6ecead98"
+  integrity sha512-JFta737jSP+hdAIEhk1Vs0q0YF5P8fFcj+09pweS8ktuGuZ8pPlykHsk6mPxZ8awDl4TrcxUqJo9l1IhVr/OjQ==
+  dependencies:
+    "@csstools/utilities" "^2.0.0"
+    postcss-value-parser "^4.2.0"
+
+postcss-colormin@^6.1.0:
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-6.1.0.tgz#076e8d3fb291fbff7b10e6b063be9da42ff6488d"
+  integrity sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw==
+  dependencies:
+    browserslist "^4.23.0"
+    caniuse-api "^3.0.0"
+    colord "^2.9.3"
+    postcss-value-parser "^4.2.0"
+
+postcss-convert-values@^6.1.0:
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz#3498387f8efedb817cbc63901d45bd1ceaa40f48"
+  integrity sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w==
+  dependencies:
+    browserslist "^4.23.0"
+    postcss-value-parser "^4.2.0"
+
+postcss-custom-media@^11.0.6:
+  version "11.0.6"
+  resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-11.0.6.tgz#6b450e5bfa209efb736830066682e6567bd04967"
+  integrity sha512-C4lD4b7mUIw+RZhtY7qUbf4eADmb7Ey8BFA2px9jUbwg7pjTZDl4KY4bvlUV+/vXQvzQRfiGEVJyAbtOsCMInw==
+  dependencies:
+    "@csstools/cascade-layer-name-parser" "^2.0.5"
+    "@csstools/css-parser-algorithms" "^3.0.5"
+    "@csstools/css-tokenizer" "^3.0.4"
+    "@csstools/media-query-list-parser" "^4.0.3"
+
+postcss-custom-properties@^14.0.6:
+  version "14.0.6"
+  resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-14.0.6.tgz#1af73a650bf115ba052cf915287c9982825fc90e"
+  integrity sha512-fTYSp3xuk4BUeVhxCSJdIPhDLpJfNakZKoiTDx7yRGCdlZrSJR7mWKVOBS4sBF+5poPQFMj2YdXx1VHItBGihQ==
+  dependencies:
+    "@csstools/cascade-layer-name-parser" "^2.0.5"
+    "@csstools/css-parser-algorithms" "^3.0.5"
+    "@csstools/css-tokenizer" "^3.0.4"
+    "@csstools/utilities" "^2.0.0"
+    postcss-value-parser "^4.2.0"
+
+postcss-custom-selectors@^8.0.5:
+  version "8.0.5"
+  resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-8.0.5.tgz#9448ed37a12271d7ab6cb364b6f76a46a4a323e8"
+  integrity sha512-9PGmckHQswiB2usSO6XMSswO2yFWVoCAuih1yl9FVcwkscLjRKjwsjM3t+NIWpSU2Jx3eOiK2+t4vVTQaoCHHg==
+  dependencies:
+    "@csstools/cascade-layer-name-parser" "^2.0.5"
+    "@csstools/css-parser-algorithms" "^3.0.5"
+    "@csstools/css-tokenizer" "^3.0.4"
+    postcss-selector-parser "^7.0.0"
+
+postcss-dir-pseudo-class@^9.0.1:
+  version "9.0.1"
+  resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-9.0.1.tgz#80d9e842c9ae9d29f6bf5fd3cf9972891d6cc0ca"
+  integrity sha512-tRBEK0MHYvcMUrAuYMEOa0zg9APqirBcgzi6P21OhxtJyJADo/SWBwY1CAwEohQ/6HDaa9jCjLRG7K3PVQYHEA==
+  dependencies:
+    postcss-selector-parser "^7.0.0"
+
+postcss-discard-comments@^6.0.2:
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz#e768dcfdc33e0216380623652b0a4f69f4678b6c"
+  integrity sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw==
+
+postcss-discard-duplicates@^6.0.3:
+  version "6.0.3"
+  resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.3.tgz#d121e893c38dc58a67277f75bb58ba43fce4c3eb"
+  integrity sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw==
+
+postcss-discard-empty@^6.0.3:
+  version "6.0.3"
+  resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-6.0.3.tgz#ee39c327219bb70473a066f772621f81435a79d9"
+  integrity sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ==
+
+postcss-discard-overridden@^6.0.2:
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-6.0.2.tgz#4e9f9c62ecd2df46e8fdb44dc17e189776572e2d"
+  integrity sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ==
+
+postcss-discard-unused@^6.0.5:
+  version "6.0.5"
+  resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-6.0.5.tgz#c1b0e8c032c6054c3fbd22aaddba5b248136f338"
+  integrity sha512-wHalBlRHkaNnNwfC8z+ppX57VhvS+HWgjW508esjdaEYr3Mx7Gnn2xA4R/CKf5+Z9S5qsqC+Uzh4ueENWwCVUA==
+  dependencies:
+    postcss-selector-parser "^6.0.16"
+
+postcss-double-position-gradients@^6.0.2:
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-6.0.2.tgz#185f8eab2db9cf4e34be69b5706c905895bb52ae"
+  integrity sha512-7qTqnL7nfLRyJK/AHSVrrXOuvDDzettC+wGoienURV8v2svNbu6zJC52ruZtHaO6mfcagFmuTGFdzRsJKB3k5Q==
+  dependencies:
+    "@csstools/postcss-progressive-custom-properties" "^4.1.0"
+    "@csstools/utilities" "^2.0.0"
+    postcss-value-parser "^4.2.0"
+
+postcss-focus-visible@^10.0.1:
+  version "10.0.1"
+  resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-10.0.1.tgz#1f7904904368a2d1180b220595d77b6f8a957868"
+  integrity sha512-U58wyjS/I1GZgjRok33aE8juW9qQgQUNwTSdxQGuShHzwuYdcklnvK/+qOWX1Q9kr7ysbraQ6ht6r+udansalA==
+  dependencies:
+    postcss-selector-parser "^7.0.0"
+
+postcss-focus-within@^9.0.1:
+  version "9.0.1"
+  resolved "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-9.0.1.tgz#ac01ce80d3f2e8b2b3eac4ff84f8e15cd0057bc7"
+  integrity sha512-fzNUyS1yOYa7mOjpci/bR+u+ESvdar6hk8XNK/TRR0fiGTp2QT5N+ducP0n3rfH/m9I7H/EQU6lsa2BrgxkEjw==
+  dependencies:
+    postcss-selector-parser "^7.0.0"
+
+postcss-font-variant@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz#efd59b4b7ea8bb06127f2d031bfbb7f24d32fa66"
+  integrity sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==
+
+postcss-gap-properties@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-6.0.0.tgz#d5ff0bdf923c06686499ed2b12e125fe64054fed"
+  integrity sha512-Om0WPjEwiM9Ru+VhfEDPZJAKWUd0mV1HmNXqp2C29z80aQ2uP9UVhLc7e3aYMIor/S5cVhoPgYQ7RtfeZpYTRw==
+
+postcss-image-set-function@^7.0.0:
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-7.0.0.tgz#538e94e16716be47f9df0573b56bbaca86e1da53"
+  integrity sha512-QL7W7QNlZuzOwBTeXEmbVckNt1FSmhQtbMRvGGqqU4Nf4xk6KUEQhAoWuMzwbSv5jxiRiSZ5Tv7eiDB9U87znA==
+  dependencies:
+    "@csstools/utilities" "^2.0.0"
+    postcss-value-parser "^4.2.0"
+
+postcss-import@^15.1.0:
+  version "15.1.0"
+  resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-15.1.0.tgz#41c64ed8cc0e23735a9698b3249ffdbf704adc70"
+  integrity sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==
+  dependencies:
+    postcss-value-parser "^4.0.0"
+    read-cache "^1.0.0"
+    resolve "^1.1.7"
+
+postcss-js@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.0.1.tgz#61598186f3703bab052f1c4f7d805f3991bee9d2"
+  integrity sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==
+  dependencies:
+    camelcase-css "^2.0.1"
+
+postcss-lab-function@^7.0.10:
+  version "7.0.10"
+  resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-7.0.10.tgz#0537bd7245b935fc133298c8896bcbd160540cae"
+  integrity sha512-tqs6TCEv9tC1Riq6fOzHuHcZyhg4k3gIAMB8GGY/zA1ssGdm6puHMVE7t75aOSoFg7UD2wyrFFhbldiCMyyFTQ==
+  dependencies:
+    "@csstools/css-color-parser" "^3.0.10"
+    "@csstools/css-parser-algorithms" "^3.0.5"
+    "@csstools/css-tokenizer" "^3.0.4"
+    "@csstools/postcss-progressive-custom-properties" "^4.1.0"
+    "@csstools/utilities" "^2.0.0"
+
+postcss-load-config@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.2.tgz#7159dcf626118d33e299f485d6afe4aff7c4a3e3"
+  integrity sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==
+  dependencies:
+    lilconfig "^3.0.0"
+    yaml "^2.3.4"
+
+postcss-loader@^7.3.4:
+  version "7.3.4"
+  resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-7.3.4.tgz#aed9b79ce4ed7e9e89e56199d25ad1ec8f606209"
+  integrity sha512-iW5WTTBSC5BfsBJ9daFMPVrLT36MrNiC6fqOZTTaHjBNX6Pfd5p+hSBqe/fEeNd7pc13QiAyGt7VdGMw4eRC4A==
+  dependencies:
+    cosmiconfig "^8.3.5"
+    jiti "^1.20.0"
+    semver "^7.5.4"
+
+postcss-logical@^8.1.0:
+  version "8.1.0"
+  resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-8.1.0.tgz#4092b16b49e3ecda70c4d8945257da403d167228"
+  integrity sha512-pL1hXFQ2fEXNKiNiAgtfA005T9FBxky5zkX6s4GZM2D8RkVgRqz3f4g1JUoq925zXv495qk8UNldDwh8uGEDoA==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+postcss-merge-idents@^6.0.3:
+  version "6.0.3"
+  resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-6.0.3.tgz#7b9c31c7bc823c94bec50f297f04e3c2b838ea65"
+  integrity sha512-1oIoAsODUs6IHQZkLQGO15uGEbK3EAl5wi9SS8hs45VgsxQfMnxvt+L+zIr7ifZFIH14cfAeVe2uCTa+SPRa3g==
+  dependencies:
+    cssnano-utils "^4.0.2"
+    postcss-value-parser "^4.2.0"
+
+postcss-merge-longhand@^6.0.5:
+  version "6.0.5"
+  resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-6.0.5.tgz#ba8a8d473617c34a36abbea8dda2b215750a065a"
+  integrity sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+    stylehacks "^6.1.1"
+
+postcss-merge-rules@^6.1.1:
+  version "6.1.1"
+  resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-6.1.1.tgz#7aa539dceddab56019469c0edd7d22b64c3dea9d"
+  integrity sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ==
+  dependencies:
+    browserslist "^4.23.0"
+    caniuse-api "^3.0.0"
+    cssnano-utils "^4.0.2"
+    postcss-selector-parser "^6.0.16"
+
+postcss-minify-font-values@^6.1.0:
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz#a0e574c02ee3f299be2846369211f3b957ea4c59"
+  integrity sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+postcss-minify-gradients@^6.0.3:
+  version "6.0.3"
+  resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-6.0.3.tgz#ca3eb55a7bdb48a1e187a55c6377be918743dbd6"
+  integrity sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q==
+  dependencies:
+    colord "^2.9.3"
+    cssnano-utils "^4.0.2"
+    postcss-value-parser "^4.2.0"
+
+postcss-minify-params@^6.1.0:
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-6.1.0.tgz#54551dec77b9a45a29c3cb5953bf7325a399ba08"
+  integrity sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA==
+  dependencies:
+    browserslist "^4.23.0"
+    cssnano-utils "^4.0.2"
+    postcss-value-parser "^4.2.0"
+
+postcss-minify-selectors@^6.0.4:
+  version "6.0.4"
+  resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-6.0.4.tgz#197f7d72e6dd19eed47916d575d69dc38b396aff"
+  integrity sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ==
+  dependencies:
+    postcss-selector-parser "^6.0.16"
+
+postcss-modules-extract-imports@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz#b4497cb85a9c0c4b5aabeb759bb25e8d89f15002"
+  integrity sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==
+
+postcss-modules-local-by-default@^4.0.5:
+  version "4.2.0"
+  resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz#d150f43837831dae25e4085596e84f6f5d6ec368"
+  integrity sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==
+  dependencies:
+    icss-utils "^5.0.0"
+    postcss-selector-parser "^7.0.0"
+    postcss-value-parser "^4.1.0"
+
+postcss-modules-scope@^3.2.0:
+  version "3.2.1"
+  resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz#1bbccddcb398f1d7a511e0a2d1d047718af4078c"
+  integrity sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==
+  dependencies:
+    postcss-selector-parser "^7.0.0"
+
+postcss-modules-values@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c"
+  integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==
+  dependencies:
+    icss-utils "^5.0.0"
+
+postcss-nested@^6.2.0:
+  version "6.2.0"
+  resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.2.0.tgz#4c2d22ab5f20b9cb61e2c5c5915950784d068131"
+  integrity sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==
+  dependencies:
+    postcss-selector-parser "^6.1.1"
+
+postcss-nesting@^13.0.2:
+  version "13.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-13.0.2.tgz#fde0d4df772b76d03b52eccc84372e8d1ca1402e"
+  integrity sha512-1YCI290TX+VP0U/K/aFxzHzQWHWURL+CtHMSbex1lCdpXD1SoR2sYuxDu5aNI9lPoXpKTCggFZiDJbwylU0LEQ==
+  dependencies:
+    "@csstools/selector-resolve-nested" "^3.1.0"
+    "@csstools/selector-specificity" "^5.0.0"
+    postcss-selector-parser "^7.0.0"
+
+postcss-normalize-charset@^6.0.2:
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz#1ec25c435057a8001dac942942a95ffe66f721e1"
+  integrity sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ==
+
+postcss-normalize-display-values@^6.0.2:
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.2.tgz#54f02764fed0b288d5363cbb140d6950dbbdd535"
+  integrity sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+postcss-normalize-positions@^6.0.2:
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-6.0.2.tgz#e982d284ec878b9b819796266f640852dbbb723a"
+  integrity sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+postcss-normalize-repeat-style@^6.0.2:
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.2.tgz#f8006942fd0617c73f049dd8b6201c3a3040ecf3"
+  integrity sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+postcss-normalize-string@^6.0.2:
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-6.0.2.tgz#e3cc6ad5c95581acd1fc8774b309dd7c06e5e363"
+  integrity sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+postcss-normalize-timing-functions@^6.0.2:
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.2.tgz#40cb8726cef999de984527cbd9d1db1f3e9062c0"
+  integrity sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+postcss-normalize-unicode@^6.1.0:
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-6.1.0.tgz#aaf8bbd34c306e230777e80f7f12a4b7d27ce06e"
+  integrity sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg==
+  dependencies:
+    browserslist "^4.23.0"
+    postcss-value-parser "^4.2.0"
+
+postcss-normalize-url@^6.0.2:
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-6.0.2.tgz#292792386be51a8de9a454cb7b5c58ae22db0f79"
+  integrity sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+postcss-normalize-whitespace@^6.0.2:
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.2.tgz#fbb009e6ebd312f8b2efb225c2fcc7cf32b400cd"
+  integrity sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+postcss-opacity-percentage@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/postcss-opacity-percentage/-/postcss-opacity-percentage-3.0.0.tgz#0b0db5ed5db5670e067044b8030b89c216e1eb0a"
+  integrity sha512-K6HGVzyxUxd/VgZdX04DCtdwWJ4NGLG212US4/LA1TLAbHgmAsTWVR86o+gGIbFtnTkfOpb9sCRBx8K7HO66qQ==
+
+postcss-ordered-values@^6.0.2:
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz#366bb663919707093451ab70c3f99c05672aaae5"
+  integrity sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q==
+  dependencies:
+    cssnano-utils "^4.0.2"
+    postcss-value-parser "^4.2.0"
+
+postcss-overflow-shorthand@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-6.0.0.tgz#f5252b4a2ee16c68cd8a9029edb5370c4a9808af"
+  integrity sha512-BdDl/AbVkDjoTofzDQnwDdm/Ym6oS9KgmO7Gr+LHYjNWJ6ExORe4+3pcLQsLA9gIROMkiGVjjwZNoL/mpXHd5Q==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+postcss-page-break@^3.0.4:
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-3.0.4.tgz#7fbf741c233621622b68d435babfb70dd8c1ee5f"
+  integrity sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==
+
+postcss-place@^10.0.0:
+  version "10.0.0"
+  resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-10.0.0.tgz#ba36ee4786ca401377ced17a39d9050ed772e5a9"
+  integrity sha512-5EBrMzat2pPAxQNWYavwAfoKfYcTADJ8AXGVPcUZ2UkNloUTWzJQExgrzrDkh3EKzmAx1evfTAzF9I8NGcc+qw==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+postcss-preset-env@^10.2.1:
+  version "10.2.3"
+  resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-10.2.3.tgz#3a84bde7205b48f1304a656b25841bd3f40fb3cb"
+  integrity sha512-zlQN1yYmA7lFeM1wzQI14z97mKoM8qGng+198w1+h6sCud/XxOjcKtApY9jWr7pXNS3yHDEafPlClSsWnkY8ow==
+  dependencies:
+    "@csstools/postcss-cascade-layers" "^5.0.1"
+    "@csstools/postcss-color-function" "^4.0.10"
+    "@csstools/postcss-color-mix-function" "^3.0.10"
+    "@csstools/postcss-color-mix-variadic-function-arguments" "^1.0.0"
+    "@csstools/postcss-content-alt-text" "^2.0.6"
+    "@csstools/postcss-exponential-functions" "^2.0.9"
+    "@csstools/postcss-font-format-keywords" "^4.0.0"
+    "@csstools/postcss-gamut-mapping" "^2.0.10"
+    "@csstools/postcss-gradients-interpolation-method" "^5.0.10"
+    "@csstools/postcss-hwb-function" "^4.0.10"
+    "@csstools/postcss-ic-unit" "^4.0.2"
+    "@csstools/postcss-initial" "^2.0.1"
+    "@csstools/postcss-is-pseudo-class" "^5.0.3"
+    "@csstools/postcss-light-dark-function" "^2.0.9"
+    "@csstools/postcss-logical-float-and-clear" "^3.0.0"
+    "@csstools/postcss-logical-overflow" "^2.0.0"
+    "@csstools/postcss-logical-overscroll-behavior" "^2.0.0"
+    "@csstools/postcss-logical-resize" "^3.0.0"
+    "@csstools/postcss-logical-viewport-units" "^3.0.4"
+    "@csstools/postcss-media-minmax" "^2.0.9"
+    "@csstools/postcss-media-queries-aspect-ratio-number-values" "^3.0.5"
+    "@csstools/postcss-nested-calc" "^4.0.0"
+    "@csstools/postcss-normalize-display-values" "^4.0.0"
+    "@csstools/postcss-oklab-function" "^4.0.10"
+    "@csstools/postcss-progressive-custom-properties" "^4.1.0"
+    "@csstools/postcss-random-function" "^2.0.1"
+    "@csstools/postcss-relative-color-syntax" "^3.0.10"
+    "@csstools/postcss-scope-pseudo-class" "^4.0.1"
+    "@csstools/postcss-sign-functions" "^1.1.4"
+    "@csstools/postcss-stepped-value-functions" "^4.0.9"
+    "@csstools/postcss-text-decoration-shorthand" "^4.0.2"
+    "@csstools/postcss-trigonometric-functions" "^4.0.9"
+    "@csstools/postcss-unset-value" "^4.0.0"
+    autoprefixer "^10.4.21"
+    browserslist "^4.25.0"
+    css-blank-pseudo "^7.0.1"
+    css-has-pseudo "^7.0.2"
+    css-prefers-color-scheme "^10.0.0"
+    cssdb "^8.3.0"
+    postcss-attribute-case-insensitive "^7.0.1"
+    postcss-clamp "^4.1.0"
+    postcss-color-functional-notation "^7.0.10"
+    postcss-color-hex-alpha "^10.0.0"
+    postcss-color-rebeccapurple "^10.0.0"
+    postcss-custom-media "^11.0.6"
+    postcss-custom-properties "^14.0.6"
+    postcss-custom-selectors "^8.0.5"
+    postcss-dir-pseudo-class "^9.0.1"
+    postcss-double-position-gradients "^6.0.2"
+    postcss-focus-visible "^10.0.1"
+    postcss-focus-within "^9.0.1"
+    postcss-font-variant "^5.0.0"
+    postcss-gap-properties "^6.0.0"
+    postcss-image-set-function "^7.0.0"
+    postcss-lab-function "^7.0.10"
+    postcss-logical "^8.1.0"
+    postcss-nesting "^13.0.2"
+    postcss-opacity-percentage "^3.0.0"
+    postcss-overflow-shorthand "^6.0.0"
+    postcss-page-break "^3.0.4"
+    postcss-place "^10.0.0"
+    postcss-pseudo-class-any-link "^10.0.1"
+    postcss-replace-overflow-wrap "^4.0.0"
+    postcss-selector-not "^8.0.1"
+
+postcss-pseudo-class-any-link@^10.0.1:
+  version "10.0.1"
+  resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-10.0.1.tgz#06455431171bf44b84d79ebaeee9fd1c05946544"
+  integrity sha512-3el9rXlBOqTFaMFkWDOkHUTQekFIYnaQY55Rsp8As8QQkpiSgIYEcF/6Ond93oHiDsGb4kad8zjt+NPlOC1H0Q==
+  dependencies:
+    postcss-selector-parser "^7.0.0"
+
+postcss-reduce-idents@^6.0.3:
+  version "6.0.3"
+  resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-6.0.3.tgz#b0d9c84316d2a547714ebab523ec7d13704cd486"
+  integrity sha512-G3yCqZDpsNPoQgbDUy3T0E6hqOQ5xigUtBQyrmq3tn2GxlyiL0yyl7H+T8ulQR6kOcHJ9t7/9H4/R2tv8tJbMA==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+postcss-reduce-initial@^6.1.0:
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-6.1.0.tgz#4401297d8e35cb6e92c8e9586963e267105586ba"
+  integrity sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw==
+  dependencies:
+    browserslist "^4.23.0"
+    caniuse-api "^3.0.0"
+
+postcss-reduce-transforms@^6.0.2:
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.2.tgz#6fa2c586bdc091a7373caeee4be75a0f3e12965d"
+  integrity sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+postcss-replace-overflow-wrap@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz#d2df6bed10b477bf9c52fab28c568b4b29ca4319"
+  integrity sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==
+
+postcss-selector-not@^8.0.1:
+  version "8.0.1"
+  resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-8.0.1.tgz#f2df9c6ac9f95e9fe4416ca41a957eda16130172"
+  integrity sha512-kmVy/5PYVb2UOhy0+LqUYAhKj7DUGDpSWa5LZqlkWJaaAV+dxxsOG3+St0yNLu6vsKD7Dmqx+nWQt0iil89+WA==
+  dependencies:
+    postcss-selector-parser "^7.0.0"
+
+postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.16, postcss-selector-parser@^6.1.1, postcss-selector-parser@^6.1.2:
+  version "6.1.2"
+  resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz#27ecb41fb0e3b6ba7a1ec84fff347f734c7929de"
+  integrity sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==
+  dependencies:
+    cssesc "^3.0.0"
+    util-deprecate "^1.0.2"
+
+postcss-selector-parser@^7.0.0:
+  version "7.1.0"
+  resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz#4d6af97eba65d73bc4d84bcb343e865d7dd16262"
+  integrity sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==
+  dependencies:
+    cssesc "^3.0.0"
+    util-deprecate "^1.0.2"
+
+postcss-sort-media-queries@^5.2.0:
+  version "5.2.0"
+  resolved "https://registry.yarnpkg.com/postcss-sort-media-queries/-/postcss-sort-media-queries-5.2.0.tgz#4556b3f982ef27d3bac526b99b6c0d3359a6cf97"
+  integrity sha512-AZ5fDMLD8SldlAYlvi8NIqo0+Z8xnXU2ia0jxmuhxAU+Lqt9K+AlmLNJ/zWEnE9x+Zx3qL3+1K20ATgNOr3fAA==
+  dependencies:
+    sort-css-media-queries "2.2.0"
+
+postcss-svgo@^6.0.3:
+  version "6.0.3"
+  resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-6.0.3.tgz#1d6e180d6df1fa8a3b30b729aaa9161e94f04eaa"
+  integrity sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+    svgo "^3.2.0"
+
+postcss-unique-selectors@^6.0.4:
+  version "6.0.4"
+  resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-6.0.4.tgz#983ab308896b4bf3f2baaf2336e14e52c11a2088"
+  integrity sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg==
+  dependencies:
+    postcss-selector-parser "^6.0.16"
+
+postcss-value-parser@^4.0.0, postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0:
+  version "4.2.0"
+  resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
+  integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
+
+postcss-zindex@^6.0.2:
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-6.0.2.tgz#e498304b83a8b165755f53db40e2ea65a99b56e1"
+  integrity sha512-5BxW9l1evPB/4ZIc+2GobEBoKC+h8gPGCMi+jxsYvd2x0mjq7wazk6DrP71pStqxE9Foxh5TVnonbWpFZzXaYg==
+
+postcss@^8.4.21, postcss@^8.4.24, postcss@^8.4.33, postcss@^8.4.47, postcss@^8.5.3, postcss@^8.5.4:
+  version "8.5.6"
+  resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.6.tgz#2825006615a619b4f62a9e7426cc120b349a8f3c"
+  integrity sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==
+  dependencies:
+    nanoid "^3.3.11"
+    picocolors "^1.1.1"
+    source-map-js "^1.2.1"
+
+pretty-error@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6"
+  integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==
+  dependencies:
+    lodash "^4.17.20"
+    renderkid "^3.0.0"
+
+pretty-ms@^7.0.1:
+  version "7.0.1"
+  resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-7.0.1.tgz#7d903eaab281f7d8e03c66f867e239dc32fb73e8"
+  integrity sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==
+  dependencies:
+    parse-ms "^2.1.0"
+
+pretty-time@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/pretty-time/-/pretty-time-1.1.0.tgz#ffb7429afabb8535c346a34e41873adf3d74dd0e"
+  integrity sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==
+
+prism-react-renderer@^2.3.0:
+  version "2.4.1"
+  resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-2.4.1.tgz#ac63b7f78e56c8f2b5e76e823a976d5ede77e35f"
+  integrity sha512-ey8Ls/+Di31eqzUxC46h8MksNuGx/n0AAC8uKpwFau4RPDYLuE3EXTp8N8G2vX2N7UC/+IXeNUnlWBGGcAG+Ig==
+  dependencies:
+    "@types/prismjs" "^1.26.0"
+    clsx "^2.0.0"
+
+prismjs@^1.29.0:
+  version "1.30.0"
+  resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.30.0.tgz#d9709969d9d4e16403f6f348c63553b19f0975a9"
+  integrity sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==
+
+process-nextick-args@~2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
+  integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
+
+prompts@^2.4.2:
+  version "2.4.2"
+  resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069"
+  integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==
+  dependencies:
+    kleur "^3.0.3"
+    sisteransi "^1.0.5"
+
+prop-types@^15.5.0, prop-types@^15.6.2, prop-types@^15.7.2:
+  version "15.8.1"
+  resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
+  integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
+  dependencies:
+    loose-envify "^1.4.0"
+    object-assign "^4.1.1"
+    react-is "^16.13.1"
+
+property-information@^6.0.0:
+  version "6.5.0"
+  resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.5.0.tgz#6212fbb52ba757e92ef4fb9d657563b933b7ffec"
+  integrity sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==
+
+property-information@^7.0.0:
+  version "7.1.0"
+  resolved "https://registry.yarnpkg.com/property-information/-/property-information-7.1.0.tgz#b622e8646e02b580205415586b40804d3e8bfd5d"
+  integrity sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==
+
+proto-list@~1.2.1:
+  version "1.2.4"
+  resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849"
+  integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==
+
+proxy-addr@~2.0.7:
+  version "2.0.7"
+  resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025"
+  integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==
+  dependencies:
+    forwarded "0.2.0"
+    ipaddr.js "1.9.1"
+
+proxy-from-env@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
+  integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
+
+punycode@^2.1.0:
+  version "2.3.1"
+  resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5"
+  integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==
+
+pupa@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/pupa/-/pupa-3.1.0.tgz#f15610274376bbcc70c9a3aa8b505ea23f41c579"
+  integrity sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==
+  dependencies:
+    escape-goat "^4.0.0"
+
+qs@6.13.0:
+  version "6.13.0"
+  resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906"
+  integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==
+  dependencies:
+    side-channel "^1.0.6"
+
+quansync@^0.2.8:
+  version "0.2.10"
+  resolved "https://registry.yarnpkg.com/quansync/-/quansync-0.2.10.tgz#32053cf166fa36511aae95fc49796116f2dc20e1"
+  integrity sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==
+
+queue-microtask@^1.2.2:
+  version "1.2.3"
+  resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
+  integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
+
+quick-lru@^5.1.1:
+  version "5.1.1"
+  resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932"
+  integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==
+
+randombytes@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
+  integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
+  dependencies:
+    safe-buffer "^5.1.0"
+
+range-parser@1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e"
+  integrity sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==
+
+range-parser@^1.2.1, range-parser@~1.2.1:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
+  integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
+
+raw-body@2.5.2:
+  version "2.5.2"
+  resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a"
+  integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==
+  dependencies:
+    bytes "3.1.2"
+    http-errors "2.0.0"
+    iconv-lite "0.4.24"
+    unpipe "1.0.0"
+
+rc@1.2.8:
+  version "1.2.8"
+  resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
+  integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
+  dependencies:
+    deep-extend "^0.6.0"
+    ini "~1.3.0"
+    minimist "^1.2.0"
+    strip-json-comments "~2.0.1"
+
+react-dom@^19.0.0:
+  version "19.1.0"
+  resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.1.0.tgz#133558deca37fa1d682708df8904b25186793623"
+  integrity sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==
+  dependencies:
+    scheduler "^0.26.0"
+
+react-fast-compare@^3.2.0:
+  version "3.2.2"
+  resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.2.tgz#929a97a532304ce9fee4bcae44234f1ce2c21d49"
+  integrity sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==
+
+"react-helmet-async@npm:@slorber/react-helmet-async@1.3.0":
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/@slorber/react-helmet-async/-/react-helmet-async-1.3.0.tgz#11fbc6094605cf60aa04a28c17e0aab894b4ecff"
+  integrity sha512-e9/OK8VhwUSc67diWI8Rb3I0YgI9/SBQtnhe9aEuK6MhZm7ntZZimXgwXnd8W96YTmSOb9M4d8LwhRZyhWr/1A==
+  dependencies:
+    "@babel/runtime" "^7.12.5"
+    invariant "^2.2.4"
+    prop-types "^15.7.2"
+    react-fast-compare "^3.2.0"
+    shallowequal "^1.1.0"
+
+react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0:
+  version "16.13.1"
+  resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
+  integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
+
+react-json-view-lite@^2.3.0:
+  version "2.4.1"
+  resolved "https://registry.yarnpkg.com/react-json-view-lite/-/react-json-view-lite-2.4.1.tgz#0d06696a06aaf4a74e890302b76cf8cddcc45d60"
+  integrity sha512-fwFYknRIBxjbFm0kBDrzgBy1xa5tDg2LyXXBepC5f1b+MY3BUClMCsvanMPn089JbV1Eg3nZcrp0VCuH43aXnA==
+
+react-loadable-ssr-addon-v5-slorber@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz#2cdc91e8a744ffdf9e3556caabeb6e4278689883"
+  integrity sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==
+  dependencies:
+    "@babel/runtime" "^7.10.3"
+
+react-loadable@^5.5.0:
+  version "5.5.0"
+  resolved "https://registry.yarnpkg.com/react-loadable/-/react-loadable-5.5.0.tgz#582251679d3da86c32aae2c8e689c59f1196d8c4"
+  integrity sha512-C8Aui0ZpMd4KokxRdVAm2bQtI03k2RMRNzOB+IipV3yxFTSVICv7WoUr5L9ALB5BmKO1iHgZtWM8EvYG83otdg==
+  dependencies:
+    prop-types "^15.5.0"
+
+"react-loadable@npm:@docusaurus/react-loadable@6.0.0":
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/@docusaurus/react-loadable/-/react-loadable-6.0.0.tgz#de6c7f73c96542bd70786b8e522d535d69069dc4"
+  integrity sha512-YMMxTUQV/QFSnbgrP3tjDzLHRg7vsbMn8e9HAa8o/1iXoiomo48b7sk/kkmWEuWNDPJVlKSJRB6Y2fHqdJk+SQ==
+  dependencies:
+    "@types/react" "*"
+
+react-router-config@^5.1.1:
+  version "5.1.1"
+  resolved "https://registry.yarnpkg.com/react-router-config/-/react-router-config-5.1.1.tgz#0f4263d1a80c6b2dc7b9c1902c9526478194a988"
+  integrity sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==
+  dependencies:
+    "@babel/runtime" "^7.1.2"
+
+react-router-dom@^5.3.4:
+  version "5.3.4"
+  resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.3.4.tgz#2ed62ffd88cae6db134445f4a0c0ae8b91d2e5e6"
+  integrity sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==
+  dependencies:
+    "@babel/runtime" "^7.12.13"
+    history "^4.9.0"
+    loose-envify "^1.3.1"
+    prop-types "^15.6.2"
+    react-router "5.3.4"
+    tiny-invariant "^1.0.2"
+    tiny-warning "^1.0.0"
+
+react-router@5.3.4, react-router@^5.3.4:
+  version "5.3.4"
+  resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.3.4.tgz#8ca252d70fcc37841e31473c7a151cf777887bb5"
+  integrity sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==
+  dependencies:
+    "@babel/runtime" "^7.12.13"
+    history "^4.9.0"
+    hoist-non-react-statics "^3.1.0"
+    loose-envify "^1.3.1"
+    path-to-regexp "^1.7.0"
+    prop-types "^15.6.2"
+    react-is "^16.6.0"
+    tiny-invariant "^1.0.2"
+    tiny-warning "^1.0.0"
+
+react@^19.0.0:
+  version "19.1.0"
+  resolved "https://registry.yarnpkg.com/react/-/react-19.1.0.tgz#926864b6c48da7627f004795d6cce50e90793b75"
+  integrity sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==
+
+read-cache@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774"
+  integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==
+  dependencies:
+    pify "^2.3.0"
+
+readable-stream@^2.0.1:
+  version "2.3.8"
+  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b"
+  integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==
+  dependencies:
+    core-util-is "~1.0.0"
+    inherits "~2.0.3"
+    isarray "~1.0.0"
+    process-nextick-args "~2.0.0"
+    safe-buffer "~5.1.1"
+    string_decoder "~1.1.1"
+    util-deprecate "~1.0.1"
+
+readable-stream@^3.0.6:
+  version "3.6.2"
+  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967"
+  integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==
+  dependencies:
+    inherits "^2.0.3"
+    string_decoder "^1.1.1"
+    util-deprecate "^1.0.1"
+
+readdirp@^4.0.1:
+  version "4.1.2"
+  resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.1.2.tgz#eb85801435fbf2a7ee58f19e0921b068fc69948d"
+  integrity sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==
+
+readdirp@~3.6.0:
+  version "3.6.0"
+  resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
+  integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
+  dependencies:
+    picomatch "^2.2.1"
+
+recma-build-jsx@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz#c02f29e047e103d2fab2054954e1761b8ea253c4"
+  integrity sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==
+  dependencies:
+    "@types/estree" "^1.0.0"
+    estree-util-build-jsx "^3.0.0"
+    vfile "^6.0.0"
+
+recma-jsx@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/recma-jsx/-/recma-jsx-1.0.0.tgz#f7bef02e571a49d6ba3efdfda8e2efab48dbe3aa"
+  integrity sha512-5vwkv65qWwYxg+Atz95acp8DMu1JDSqdGkA2Of1j6rCreyFUE/gp15fC8MnGEuG1W68UKjM6x6+YTWIh7hZM/Q==
+  dependencies:
+    acorn-jsx "^5.0.0"
+    estree-util-to-js "^2.0.0"
+    recma-parse "^1.0.0"
+    recma-stringify "^1.0.0"
+    unified "^11.0.0"
+
+recma-parse@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/recma-parse/-/recma-parse-1.0.0.tgz#c351e161bb0ab47d86b92a98a9d891f9b6814b52"
+  integrity sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==
+  dependencies:
+    "@types/estree" "^1.0.0"
+    esast-util-from-js "^2.0.0"
+    unified "^11.0.0"
+    vfile "^6.0.0"
+
+recma-stringify@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/recma-stringify/-/recma-stringify-1.0.0.tgz#54632030631e0c7546136ff9ef8fde8e7b44f130"
+  integrity sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==
+  dependencies:
+    "@types/estree" "^1.0.0"
+    estree-util-to-js "^2.0.0"
+    unified "^11.0.0"
+    vfile "^6.0.0"
+
+regenerate-unicode-properties@^10.2.0:
+  version "10.2.0"
+  resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz#626e39df8c372338ea9b8028d1f99dc3fd9c3db0"
+  integrity sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==
+  dependencies:
+    regenerate "^1.4.2"
+
+regenerate@^1.4.2:
+  version "1.4.2"
+  resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a"
+  integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==
+
+regexpu-core@^6.2.0:
+  version "6.2.0"
+  resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-6.2.0.tgz#0e5190d79e542bf294955dccabae04d3c7d53826"
+  integrity sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==
+  dependencies:
+    regenerate "^1.4.2"
+    regenerate-unicode-properties "^10.2.0"
+    regjsgen "^0.8.0"
+    regjsparser "^0.12.0"
+    unicode-match-property-ecmascript "^2.0.0"
+    unicode-match-property-value-ecmascript "^2.1.0"
+
+registry-auth-token@^5.0.1:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-5.1.0.tgz#3c659047ecd4caebd25bc1570a3aa979ae490eca"
+  integrity sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw==
+  dependencies:
+    "@pnpm/npm-conf" "^2.1.0"
+
+registry-url@^6.0.0:
+  version "6.0.1"
+  resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-6.0.1.tgz#056d9343680f2f64400032b1e199faa692286c58"
+  integrity sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==
+  dependencies:
+    rc "1.2.8"
+
+regjsgen@^0.8.0:
+  version "0.8.0"
+  resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.8.0.tgz#df23ff26e0c5b300a6470cad160a9d090c3a37ab"
+  integrity sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==
+
+regjsparser@^0.12.0:
+  version "0.12.0"
+  resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.12.0.tgz#0e846df6c6530586429377de56e0475583b088dc"
+  integrity sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==
+  dependencies:
+    jsesc "~3.0.2"
+
+rehype-raw@^7.0.0:
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/rehype-raw/-/rehype-raw-7.0.0.tgz#59d7348fd5dbef3807bbaa1d443efd2dd85ecee4"
+  integrity sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==
+  dependencies:
+    "@types/hast" "^3.0.0"
+    hast-util-raw "^9.0.0"
+    vfile "^6.0.0"
+
+rehype-recma@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/rehype-recma/-/rehype-recma-1.0.0.tgz#d68ef6344d05916bd96e25400c6261775411aa76"
+  integrity sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==
+  dependencies:
+    "@types/estree" "^1.0.0"
+    "@types/hast" "^3.0.0"
+    hast-util-to-estree "^3.0.0"
+
+relateurl@^0.2.7:
+  version "0.2.7"
+  resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9"
+  integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==
+
+remark-directive@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/remark-directive/-/remark-directive-3.0.1.tgz#689ba332f156cfe1118e849164cc81f157a3ef0a"
+  integrity sha512-gwglrEQEZcZYgVyG1tQuA+h58EZfq5CSULw7J90AFuCTyib1thgHPoqQ+h9iFvU6R+vnZ5oNFQR5QKgGpk741A==
+  dependencies:
+    "@types/mdast" "^4.0.0"
+    mdast-util-directive "^3.0.0"
+    micromark-extension-directive "^3.0.0"
+    unified "^11.0.0"
+
+remark-emoji@^4.0.0:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/remark-emoji/-/remark-emoji-4.0.1.tgz#671bfda668047689e26b2078c7356540da299f04"
+  integrity sha512-fHdvsTR1dHkWKev9eNyhTo4EFwbUvJ8ka9SgeWkMPYFX4WoI7ViVBms3PjlQYgw5TLvNQso3GUB/b/8t3yo+dg==
+  dependencies:
+    "@types/mdast" "^4.0.2"
+    emoticon "^4.0.1"
+    mdast-util-find-and-replace "^3.0.1"
+    node-emoji "^2.1.0"
+    unified "^11.0.4"
+
+remark-frontmatter@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/remark-frontmatter/-/remark-frontmatter-5.0.0.tgz#b68d61552a421ec412c76f4f66c344627dc187a2"
+  integrity sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==
+  dependencies:
+    "@types/mdast" "^4.0.0"
+    mdast-util-frontmatter "^2.0.0"
+    micromark-extension-frontmatter "^2.0.0"
+    unified "^11.0.0"
+
+remark-gfm@^4.0.0:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/remark-gfm/-/remark-gfm-4.0.1.tgz#33227b2a74397670d357bf05c098eaf8513f0d6b"
+  integrity sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==
+  dependencies:
+    "@types/mdast" "^4.0.0"
+    mdast-util-gfm "^3.0.0"
+    micromark-extension-gfm "^3.0.0"
+    remark-parse "^11.0.0"
+    remark-stringify "^11.0.0"
+    unified "^11.0.0"
+
+remark-mdx@^3.0.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-3.1.0.tgz#f979be729ecb35318fa48e2135c1169607a78343"
+  integrity sha512-Ngl/H3YXyBV9RcRNdlYsZujAmhsxwzxpDzpDEhFBVAGthS4GDgnctpDjgFl/ULx5UEDzqtW1cyBSNKqYYrqLBA==
+  dependencies:
+    mdast-util-mdx "^3.0.0"
+    micromark-extension-mdxjs "^3.0.0"
+
+remark-parse@^11.0.0:
+  version "11.0.0"
+  resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-11.0.0.tgz#aa60743fcb37ebf6b069204eb4da304e40db45a1"
+  integrity sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==
+  dependencies:
+    "@types/mdast" "^4.0.0"
+    mdast-util-from-markdown "^2.0.0"
+    micromark-util-types "^2.0.0"
+    unified "^11.0.0"
+
+remark-rehype@^11.0.0:
+  version "11.1.2"
+  resolved "https://registry.yarnpkg.com/remark-rehype/-/remark-rehype-11.1.2.tgz#2addaadda80ca9bd9aa0da763e74d16327683b37"
+  integrity sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==
+  dependencies:
+    "@types/hast" "^3.0.0"
+    "@types/mdast" "^4.0.0"
+    mdast-util-to-hast "^13.0.0"
+    unified "^11.0.0"
+    vfile "^6.0.0"
+
+remark-stringify@^11.0.0:
+  version "11.0.0"
+  resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-11.0.0.tgz#4c5b01dd711c269df1aaae11743eb7e2e7636fd3"
+  integrity sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==
+  dependencies:
+    "@types/mdast" "^4.0.0"
+    mdast-util-to-markdown "^2.0.0"
+    unified "^11.0.0"
+
+renderkid@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a"
+  integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==
+  dependencies:
+    css-select "^4.1.3"
+    dom-converter "^0.2.0"
+    htmlparser2 "^6.1.0"
+    lodash "^4.17.21"
+    strip-ansi "^6.0.1"
+
+repeat-string@^1.0.0:
+  version "1.6.1"
+  resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+  integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==
+
+require-from-string@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
+  integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
+
+"require-like@>= 0.1.1":
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/require-like/-/require-like-0.1.2.tgz#ad6f30c13becd797010c468afa775c0c0a6b47fa"
+  integrity sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==
+
+requires-port@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
+  integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==
+
+resolve-alpn@^1.2.0:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9"
+  integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==
+
+resolve-from@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
+  integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+
+resolve-pathname@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd"
+  integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==
+
+resolve@^1.1.7, resolve@^1.14.2, resolve@^1.22.8:
+  version "1.22.10"
+  resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39"
+  integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==
+  dependencies:
+    is-core-module "^2.16.0"
+    path-parse "^1.0.7"
+    supports-preserve-symlinks-flag "^1.0.0"
+
+responselike@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/responselike/-/responselike-3.0.0.tgz#20decb6c298aff0dbee1c355ca95461d42823626"
+  integrity sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==
+  dependencies:
+    lowercase-keys "^3.0.0"
+
+retry@^0.13.1:
+  version "0.13.1"
+  resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658"
+  integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==
+
+reusify@^1.0.4:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f"
+  integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==
+
+rimraf@^5.0.5:
+  version "5.0.10"
+  resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-5.0.10.tgz#23b9843d3dc92db71f96e1a2ce92e39fd2a8221c"
+  integrity sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==
+  dependencies:
+    glob "^10.3.7"
+
+robust-predicates@^3.0.2:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/robust-predicates/-/robust-predicates-3.0.2.tgz#d5b28528c4824d20fc48df1928d41d9efa1ad771"
+  integrity sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==
+
+roughjs@^4.6.6:
+  version "4.6.6"
+  resolved "https://registry.yarnpkg.com/roughjs/-/roughjs-4.6.6.tgz#1059f49a5e0c80dee541a005b20cc322b222158b"
+  integrity sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==
+  dependencies:
+    hachure-fill "^0.5.2"
+    path-data-parser "^0.1.0"
+    points-on-curve "^0.2.0"
+    points-on-path "^0.2.1"
+
+rtlcss@^4.1.0:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/rtlcss/-/rtlcss-4.3.0.tgz#f8efd4d5b64f640ec4af8fa25b65bacd9e07cc97"
+  integrity sha512-FI+pHEn7Wc4NqKXMXFM+VAYKEj/mRIcW4h24YVwVtyjI+EqGrLc2Hx/Ny0lrZ21cBWU2goLy36eqMcNj3AQJig==
+  dependencies:
+    escalade "^3.1.1"
+    picocolors "^1.0.0"
+    postcss "^8.4.21"
+    strip-json-comments "^3.1.1"
+
+run-applescript@^7.0.0:
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-7.0.0.tgz#e5a553c2bffd620e169d276c1cd8f1b64778fbeb"
+  integrity sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==
+
+run-parallel@^1.1.9:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
+  integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
+  dependencies:
+    queue-microtask "^1.2.2"
+
+rw@1:
+  version "1.3.3"
+  resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4"
+  integrity sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==
+
+safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0:
+  version "5.2.1"
+  resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
+  integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
+
+safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+  version "5.1.2"
+  resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+  integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+
+"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0":
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+  integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+
+sass-loader@^16.0.2:
+  version "16.0.5"
+  resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-16.0.5.tgz#257bc90119ade066851cafe7f2c3f3504c7cda98"
+  integrity sha512-oL+CMBXrj6BZ/zOq4os+UECPL+bWqt6OAC6DWS8Ln8GZRcMDjlJ4JC3FBDuHJdYaFWIdKNIBYmtZtK2MaMkNIw==
+  dependencies:
+    neo-async "^2.6.2"
+
+sass@^1.87.0:
+  version "1.89.2"
+  resolved "https://registry.yarnpkg.com/sass/-/sass-1.89.2.tgz#a771716aeae774e2b529f72c0ff2dfd46c9de10e"
+  integrity sha512-xCmtksBKd/jdJ9Bt9p7nPKiuqrlBMBuuGkQlkhZjjQk3Ty48lv93k5Dq6OPkKt4XwxDJ7tvlfrTa1MPA9bf+QA==
+  dependencies:
+    chokidar "^4.0.0"
+    immutable "^5.0.2"
+    source-map-js ">=0.6.2 <2.0.0"
+  optionalDependencies:
+    "@parcel/watcher" "^2.4.1"
+
+sax@^1.2.4:
+  version "1.4.1"
+  resolved "https://registry.yarnpkg.com/sax/-/sax-1.4.1.tgz#44cc8988377f126304d3b3fc1010c733b929ef0f"
+  integrity sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==
+
+scheduler@^0.26.0:
+  version "0.26.0"
+  resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.26.0.tgz#4ce8a8c2a2095f13ea11bf9a445be50c555d6337"
+  integrity sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==
+
+schema-dts@^1.1.2:
+  version "1.1.5"
+  resolved "https://registry.yarnpkg.com/schema-dts/-/schema-dts-1.1.5.tgz#9237725d305bac3469f02b292a035107595dc324"
+  integrity sha512-RJr9EaCmsLzBX2NDiO5Z3ux2BVosNZN5jo0gWgsyKvxKIUL5R3swNvoorulAeL9kLB0iTSX7V6aokhla2m7xbg==
+
+schema-utils@^3.0.0:
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe"
+  integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==
+  dependencies:
+    "@types/json-schema" "^7.0.8"
+    ajv "^6.12.5"
+    ajv-keywords "^3.5.2"
+
+schema-utils@^4.0.0, schema-utils@^4.0.1, schema-utils@^4.2.0, schema-utils@^4.3.0, schema-utils@^4.3.2:
+  version "4.3.2"
+  resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.3.2.tgz#0c10878bf4a73fd2b1dfd14b9462b26788c806ae"
+  integrity sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==
+  dependencies:
+    "@types/json-schema" "^7.0.9"
+    ajv "^8.9.0"
+    ajv-formats "^2.1.1"
+    ajv-keywords "^5.1.0"
+
+search-insights@^2.0.0:
+  version "2.17.3"
+  resolved "https://registry.yarnpkg.com/search-insights/-/search-insights-2.17.3.tgz#8faea5d20507bf348caba0724e5386862847b661"
+  integrity sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==
+
+section-matter@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167"
+  integrity sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==
+  dependencies:
+    extend-shallow "^2.0.1"
+    kind-of "^6.0.0"
+
+select-hose@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"
+  integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==
+
+selfsigned@^2.4.1:
+  version "2.4.1"
+  resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.4.1.tgz#560d90565442a3ed35b674034cec4e95dceb4ae0"
+  integrity sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==
+  dependencies:
+    "@types/node-forge" "^1.3.0"
+    node-forge "^1"
+
+semver-diff@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-4.0.0.tgz#3afcf5ed6d62259f5c72d0d5d50dffbdc9680df5"
+  integrity sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==
+  dependencies:
+    semver "^7.3.5"
+
+semver@^6.3.1:
+  version "6.3.1"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
+  integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
+
+semver@^7.3.5, semver@^7.3.7, semver@^7.5.4:
+  version "7.7.2"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58"
+  integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==
+
+send@0.19.0:
+  version "0.19.0"
+  resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8"
+  integrity sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==
+  dependencies:
+    debug "2.6.9"
+    depd "2.0.0"
+    destroy "1.2.0"
+    encodeurl "~1.0.2"
+    escape-html "~1.0.3"
+    etag "~1.8.1"
+    fresh "0.5.2"
+    http-errors "2.0.0"
+    mime "1.6.0"
+    ms "2.1.3"
+    on-finished "2.4.1"
+    range-parser "~1.2.1"
+    statuses "2.0.1"
+
+serialize-javascript@^6.0.0, serialize-javascript@^6.0.1, serialize-javascript@^6.0.2:
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2"
+  integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==
+  dependencies:
+    randombytes "^2.1.0"
+
+serve-handler@^6.1.6:
+  version "6.1.6"
+  resolved "https://registry.yarnpkg.com/serve-handler/-/serve-handler-6.1.6.tgz#50803c1d3e947cd4a341d617f8209b22bd76cfa1"
+  integrity sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ==
+  dependencies:
+    bytes "3.0.0"
+    content-disposition "0.5.2"
+    mime-types "2.1.18"
+    minimatch "3.1.2"
+    path-is-inside "1.0.2"
+    path-to-regexp "3.3.0"
+    range-parser "1.2.0"
+
+serve-index@^1.9.1:
+  version "1.9.1"
+  resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239"
+  integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==
+  dependencies:
+    accepts "~1.3.4"
+    batch "0.6.1"
+    debug "2.6.9"
+    escape-html "~1.0.3"
+    http-errors "~1.6.2"
+    mime-types "~2.1.17"
+    parseurl "~1.3.2"
+
+serve-static@1.16.2:
+  version "1.16.2"
+  resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.2.tgz#b6a5343da47f6bdd2673848bf45754941e803296"
+  integrity sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==
+  dependencies:
+    encodeurl "~2.0.0"
+    escape-html "~1.0.3"
+    parseurl "~1.3.3"
+    send "0.19.0"
+
+set-function-length@^1.2.2:
+  version "1.2.2"
+  resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449"
+  integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==
+  dependencies:
+    define-data-property "^1.1.4"
+    es-errors "^1.3.0"
+    function-bind "^1.1.2"
+    get-intrinsic "^1.2.4"
+    gopd "^1.0.1"
+    has-property-descriptors "^1.0.2"
+
+setprototypeof@1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656"
+  integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==
+
+setprototypeof@1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424"
+  integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==
+
+shallow-clone@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3"
+  integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==
+  dependencies:
+    kind-of "^6.0.2"
+
+shallowequal@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8"
+  integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==
+
+shebang-command@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
+  integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
+  dependencies:
+    shebang-regex "^3.0.0"
+
+shebang-regex@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
+  integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
+
+shell-quote@^1.8.1:
+  version "1.8.3"
+  resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.3.tgz#55e40ef33cf5c689902353a3d8cd1a6725f08b4b"
+  integrity sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==
+
+side-channel-list@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad"
+  integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==
+  dependencies:
+    es-errors "^1.3.0"
+    object-inspect "^1.13.3"
+
+side-channel-map@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42"
+  integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==
+  dependencies:
+    call-bound "^1.0.2"
+    es-errors "^1.3.0"
+    get-intrinsic "^1.2.5"
+    object-inspect "^1.13.3"
+
+side-channel-weakmap@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea"
+  integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==
+  dependencies:
+    call-bound "^1.0.2"
+    es-errors "^1.3.0"
+    get-intrinsic "^1.2.5"
+    object-inspect "^1.13.3"
+    side-channel-map "^1.0.1"
+
+side-channel@^1.0.6:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9"
+  integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==
+  dependencies:
+    es-errors "^1.3.0"
+    object-inspect "^1.13.3"
+    side-channel-list "^1.0.0"
+    side-channel-map "^1.0.1"
+    side-channel-weakmap "^1.0.2"
+
+signal-exit@^3.0.2, signal-exit@^3.0.3:
+  version "3.0.7"
+  resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
+  integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
+
+signal-exit@^4.0.1:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04"
+  integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==
+
+sirv@^2.0.3:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/sirv/-/sirv-2.0.4.tgz#5dd9a725c578e34e449f332703eb2a74e46a29b0"
+  integrity sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==
+  dependencies:
+    "@polka/url" "^1.0.0-next.24"
+    mrmime "^2.0.0"
+    totalist "^3.0.0"
+
+sisteransi@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed"
+  integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==
+
+sitemap@^7.1.1:
+  version "7.1.2"
+  resolved "https://registry.yarnpkg.com/sitemap/-/sitemap-7.1.2.tgz#6ce1deb43f6f177c68bc59cf93632f54e3ae6b72"
+  integrity sha512-ARCqzHJ0p4gWt+j7NlU5eDlIO9+Rkr/JhPFZKKQ1l5GCus7rJH4UdrlVAh0xC/gDS/Qir2UMxqYNHtsKr2rpCw==
+  dependencies:
+    "@types/node" "^17.0.5"
+    "@types/sax" "^1.2.1"
+    arg "^5.0.0"
+    sax "^1.2.4"
+
+skin-tone@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/skin-tone/-/skin-tone-2.0.0.tgz#4e3933ab45c0d4f4f781745d64b9f4c208e41237"
+  integrity sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==
+  dependencies:
+    unicode-emoji-modifier-base "^1.0.0"
+
+slash@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
+  integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
+
+slash@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7"
+  integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==
+
+snake-case@^3.0.4:
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c"
+  integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==
+  dependencies:
+    dot-case "^3.0.4"
+    tslib "^2.0.3"
+
+sockjs@^0.3.24:
+  version "0.3.24"
+  resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce"
+  integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==
+  dependencies:
+    faye-websocket "^0.11.3"
+    uuid "^8.3.2"
+    websocket-driver "^0.7.4"
+
+sort-css-media-queries@2.2.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/sort-css-media-queries/-/sort-css-media-queries-2.2.0.tgz#aa33cf4a08e0225059448b6c40eddbf9f1c8334c"
+  integrity sha512-0xtkGhWCC9MGt/EzgnvbbbKhqWjl1+/rncmhTh5qCpbYguXh6S/qwePfv/JQ8jePXXmqingylxoC49pCkSPIbA==
+
+"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.1, source-map-js@^1.2.1:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46"
+  integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==
+
+source-map-support@~0.5.20:
+  version "0.5.21"
+  resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
+  integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
+  dependencies:
+    buffer-from "^1.0.0"
+    source-map "^0.6.0"
+
+source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0:
+  version "0.6.1"
+  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+  integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
+source-map@^0.7.0, source-map@^0.7.3:
+  version "0.7.4"
+  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656"
+  integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==
+
+space-separated-tokens@^2.0.0:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz#1ecd9d2350a3844572c3f4a312bceb018348859f"
+  integrity sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==
+
+spdy-transport@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31"
+  integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==
+  dependencies:
+    debug "^4.1.0"
+    detect-node "^2.0.4"
+    hpack.js "^2.1.6"
+    obuf "^1.1.2"
+    readable-stream "^3.0.6"
+    wbuf "^1.7.3"
+
+spdy@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b"
+  integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==
+  dependencies:
+    debug "^4.1.0"
+    handle-thing "^2.0.0"
+    http-deceiver "^1.2.7"
+    select-hose "^2.0.0"
+    spdy-transport "^3.0.0"
+
+sprintf-js@~1.0.2:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+  integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==
+
+srcset@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/srcset/-/srcset-4.0.0.tgz#336816b665b14cd013ba545b6fe62357f86e65f4"
+  integrity sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw==
+
+statuses@2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63"
+  integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==
+
+"statuses@>= 1.4.0 < 2":
+  version "1.5.0"
+  resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
+  integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==
+
+std-env@^3.7.0:
+  version "3.9.0"
+  resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.9.0.tgz#1a6f7243b339dca4c9fd55e1c7504c77ef23e8f1"
+  integrity sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==
+
+"string-width-cjs@npm:string-width@^4.2.0":
+  version "4.2.3"
+  resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
+  integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
+  dependencies:
+    emoji-regex "^8.0.0"
+    is-fullwidth-code-point "^3.0.0"
+    strip-ansi "^6.0.1"
+
+string-width@^4.1.0, string-width@^4.2.0:
+  version "4.2.3"
+  resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
+  integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
+  dependencies:
+    emoji-regex "^8.0.0"
+    is-fullwidth-code-point "^3.0.0"
+    strip-ansi "^6.0.1"
+
+string-width@^5.0.1, string-width@^5.1.2:
+  version "5.1.2"
+  resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794"
+  integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==
+  dependencies:
+    eastasianwidth "^0.2.0"
+    emoji-regex "^9.2.2"
+    strip-ansi "^7.0.1"
+
+string_decoder@^1.1.1:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
+  integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
+  dependencies:
+    safe-buffer "~5.2.0"
+
+string_decoder@~1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
+  integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+  dependencies:
+    safe-buffer "~5.1.0"
+
+stringify-entities@^4.0.0:
+  version "4.0.4"
+  resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-4.0.4.tgz#b3b79ef5f277cc4ac73caeb0236c5ba939b3a4f3"
+  integrity sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==
+  dependencies:
+    character-entities-html4 "^2.0.0"
+    character-entities-legacy "^3.0.0"
+
+stringify-object@^3.3.0:
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629"
+  integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==
+  dependencies:
+    get-own-enumerable-property-symbols "^3.0.0"
+    is-obj "^1.0.1"
+    is-regexp "^1.0.0"
+
+"strip-ansi-cjs@npm:strip-ansi@^6.0.1":
+  version "6.0.1"
+  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
+  integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
+  dependencies:
+    ansi-regex "^5.0.1"
+
+strip-ansi@^6.0.0, strip-ansi@^6.0.1:
+  version "6.0.1"
+  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
+  integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
+  dependencies:
+    ansi-regex "^5.0.1"
+
+strip-ansi@^7.0.1:
+  version "7.1.0"
+  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
+  integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==
+  dependencies:
+    ansi-regex "^6.0.1"
+
+strip-bom-string@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92"
+  integrity sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==
+
+strip-final-newline@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
+  integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
+
+strip-json-comments@^3.1.1:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
+  integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
+
+strip-json-comments@~2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
+  integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==
+
+style-to-js@^1.0.0:
+  version "1.1.17"
+  resolved "https://registry.yarnpkg.com/style-to-js/-/style-to-js-1.1.17.tgz#488b1558a8c1fd05352943f088cc3ce376813d83"
+  integrity sha512-xQcBGDxJb6jjFCTzvQtfiPn6YvvP2O8U1MDIPNfJQlWMYfktPy+iGsHE7cssjs7y84d9fQaK4UF3RIJaAHSoYA==
+  dependencies:
+    style-to-object "1.0.9"
+
+style-to-object@1.0.9:
+  version "1.0.9"
+  resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-1.0.9.tgz#35c65b713f4a6dba22d3d0c61435f965423653f0"
+  integrity sha512-G4qppLgKu/k6FwRpHiGiKPaPTFcG3g4wNVX/Qsfu+RqQM30E7Tyu/TEgxcL9PNLF5pdRLwQdE3YKKf+KF2Dzlw==
+  dependencies:
+    inline-style-parser "0.2.4"
+
+stylehacks@^6.1.1:
+  version "6.1.1"
+  resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-6.1.1.tgz#543f91c10d17d00a440430362d419f79c25545a6"
+  integrity sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg==
+  dependencies:
+    browserslist "^4.23.0"
+    postcss-selector-parser "^6.0.16"
+
+stylis@^4.3.6:
+  version "4.3.6"
+  resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.3.6.tgz#7c7b97191cb4f195f03ecab7d52f7902ed378320"
+  integrity sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==
+
+sucrase@^3.35.0:
+  version "3.35.0"
+  resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.35.0.tgz#57f17a3d7e19b36d8995f06679d121be914ae263"
+  integrity sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==
+  dependencies:
+    "@jridgewell/gen-mapping" "^0.3.2"
+    commander "^4.0.0"
+    glob "^10.3.10"
+    lines-and-columns "^1.1.6"
+    mz "^2.7.0"
+    pirates "^4.0.1"
+    ts-interface-checker "^0.1.9"
+
+supports-color@^7.1.0:
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
+  integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
+  dependencies:
+    has-flag "^4.0.0"
+
+supports-color@^8.0.0:
+  version "8.1.1"
+  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c"
+  integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
+  dependencies:
+    has-flag "^4.0.0"
+
+supports-preserve-symlinks-flag@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
+  integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
+
+svg-parser@^2.0.4:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5"
+  integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==
+
+svgo@^3.0.2, svgo@^3.2.0:
+  version "3.3.2"
+  resolved "https://registry.yarnpkg.com/svgo/-/svgo-3.3.2.tgz#ad58002652dffbb5986fc9716afe52d869ecbda8"
+  integrity sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==
+  dependencies:
+    "@trysound/sax" "0.2.0"
+    commander "^7.2.0"
+    css-select "^5.1.0"
+    css-tree "^2.3.1"
+    css-what "^6.1.0"
+    csso "^5.0.5"
+    picocolors "^1.0.0"
+
+tailwindcss@3:
+  version "3.4.17"
+  resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.17.tgz#ae8406c0f96696a631c790768ff319d46d5e5a63"
+  integrity sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==
+  dependencies:
+    "@alloc/quick-lru" "^5.2.0"
+    arg "^5.0.2"
+    chokidar "^3.6.0"
+    didyoumean "^1.2.2"
+    dlv "^1.1.3"
+    fast-glob "^3.3.2"
+    glob-parent "^6.0.2"
+    is-glob "^4.0.3"
+    jiti "^1.21.6"
+    lilconfig "^3.1.3"
+    micromatch "^4.0.8"
+    normalize-path "^3.0.0"
+    object-hash "^3.0.0"
+    picocolors "^1.1.1"
+    postcss "^8.4.47"
+    postcss-import "^15.1.0"
+    postcss-js "^4.0.1"
+    postcss-load-config "^4.0.2"
+    postcss-nested "^6.2.0"
+    postcss-selector-parser "^6.1.2"
+    resolve "^1.22.8"
+    sucrase "^3.35.0"
+
+tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0, tapable@^2.2.1:
+  version "2.2.2"
+  resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.2.tgz#ab4984340d30cb9989a490032f086dbb8b56d872"
+  integrity sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==
+
+terser-webpack-plugin@^5.3.11, terser-webpack-plugin@^5.3.9:
+  version "5.3.14"
+  resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz#9031d48e57ab27567f02ace85c7d690db66c3e06"
+  integrity sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==
+  dependencies:
+    "@jridgewell/trace-mapping" "^0.3.25"
+    jest-worker "^27.4.5"
+    schema-utils "^4.3.0"
+    serialize-javascript "^6.0.2"
+    terser "^5.31.1"
+
+terser@^5.10.0, terser@^5.15.1, terser@^5.31.1:
+  version "5.43.1"
+  resolved "https://registry.yarnpkg.com/terser/-/terser-5.43.1.tgz#88387f4f9794ff1a29e7ad61fb2932e25b4fdb6d"
+  integrity sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==
+  dependencies:
+    "@jridgewell/source-map" "^0.3.3"
+    acorn "^8.14.0"
+    commander "^2.20.0"
+    source-map-support "~0.5.20"
+
+thenify-all@^1.0.0:
+  version "1.6.0"
+  resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726"
+  integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==
+  dependencies:
+    thenify ">= 3.1.0 < 4"
+
+"thenify@>= 3.1.0 < 4":
+  version "3.3.1"
+  resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f"
+  integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==
+  dependencies:
+    any-promise "^1.0.0"
+
+thingies@^1.20.0:
+  version "1.21.0"
+  resolved "https://registry.yarnpkg.com/thingies/-/thingies-1.21.0.tgz#e80fbe58fd6fdaaab8fad9b67bd0a5c943c445c1"
+  integrity sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==
+
+thunky@^1.0.2:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d"
+  integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==
+
+tiny-invariant@^1.0.2:
+  version "1.3.3"
+  resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.3.tgz#46680b7a873a0d5d10005995eb90a70d74d60127"
+  integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==
+
+tiny-warning@^1.0.0:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754"
+  integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==
+
+tinyexec@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-1.0.1.tgz#70c31ab7abbb4aea0a24f55d120e5990bfa1e0b1"
+  integrity sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==
+
+tinypool@^1.0.2:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-1.1.1.tgz#059f2d042bd37567fbc017d3d426bdd2a2612591"
+  integrity sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==
+
+to-regex-range@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
+  integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
+  dependencies:
+    is-number "^7.0.0"
+
+toidentifier@1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
+  integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
+
+totalist@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/totalist/-/totalist-3.0.1.tgz#ba3a3d600c915b1a97872348f79c127475f6acf8"
+  integrity sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==
+
+tree-dump@^1.0.1:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/tree-dump/-/tree-dump-1.0.3.tgz#2f0e42e77354714418ed7ab44291e435ccdb0f80"
+  integrity sha512-il+Cv80yVHFBwokQSfd4bldvr1Md951DpgAGfmhydt04L+YzHgubm2tQ7zueWDcGENKHq0ZvGFR/hjvNXilHEg==
+
+trim-lines@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338"
+  integrity sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==
+
+trough@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/trough/-/trough-2.2.0.tgz#94a60bd6bd375c152c1df911a4b11d5b0256f50f"
+  integrity sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==
+
+ts-dedent@^2.2.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/ts-dedent/-/ts-dedent-2.2.0.tgz#39e4bd297cd036292ae2394eb3412be63f563bb5"
+  integrity sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==
+
+ts-interface-checker@^0.1.9:
+  version "0.1.13"
+  resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699"
+  integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==
+
+ts-node@^10.9.2:
+  version "10.9.2"
+  resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f"
+  integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==
+  dependencies:
+    "@cspotcode/source-map-support" "^0.8.0"
+    "@tsconfig/node10" "^1.0.7"
+    "@tsconfig/node12" "^1.0.7"
+    "@tsconfig/node14" "^1.0.0"
+    "@tsconfig/node16" "^1.0.2"
+    acorn "^8.4.1"
+    acorn-walk "^8.1.1"
+    arg "^4.1.0"
+    create-require "^1.1.0"
+    diff "^4.0.1"
+    make-error "^1.1.1"
+    v8-compile-cache-lib "^3.0.1"
+    yn "3.1.1"
+
+tslib@^2.0.0, tslib@^2.0.3, tslib@^2.4.0, tslib@^2.6.0:
+  version "2.8.1"
+  resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f"
+  integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==
+
+type-fest@^0.21.3:
+  version "0.21.3"
+  resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37"
+  integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==
+
+type-fest@^1.0.1:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1"
+  integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==
+
+type-fest@^2.13.0, type-fest@^2.5.0:
+  version "2.19.0"
+  resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b"
+  integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==
+
+type-is@~1.6.18:
+  version "1.6.18"
+  resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
+  integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
+  dependencies:
+    media-typer "0.3.0"
+    mime-types "~2.1.24"
+
+typedarray-to-buffer@^3.1.5:
+  version "3.1.5"
+  resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"
+  integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==
+  dependencies:
+    is-typedarray "^1.0.0"
+
+typescript@~5.6.2:
+  version "5.6.3"
+  resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.6.3.tgz#5f3449e31c9d94febb17de03cc081dd56d81db5b"
+  integrity sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==
+
+ufo@^1.5.4:
+  version "1.6.1"
+  resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.6.1.tgz#ac2db1d54614d1b22c1d603e3aef44a85d8f146b"
+  integrity sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==
+
+undici-types@~5.26.4:
+  version "5.26.5"
+  resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
+  integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
+
+undici-types@~7.8.0:
+  version "7.8.0"
+  resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.8.0.tgz#de00b85b710c54122e44fbfd911f8d70174cd294"
+  integrity sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==
+
+unicode-canonical-property-names-ecmascript@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz#cb3173fe47ca743e228216e4a3ddc4c84d628cc2"
+  integrity sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==
+
+unicode-emoji-modifier-base@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/unicode-emoji-modifier-base/-/unicode-emoji-modifier-base-1.0.0.tgz#dbbd5b54ba30f287e2a8d5a249da6c0cef369459"
+  integrity sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==
+
+unicode-match-property-ecmascript@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3"
+  integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==
+  dependencies:
+    unicode-canonical-property-names-ecmascript "^2.0.0"
+    unicode-property-aliases-ecmascript "^2.0.0"
+
+unicode-match-property-value-ecmascript@^2.1.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz#a0401aee72714598f739b68b104e4fe3a0cb3c71"
+  integrity sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==
+
+unicode-property-aliases-ecmascript@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd"
+  integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==
+
+unified@^11.0.0, unified@^11.0.3, unified@^11.0.4:
+  version "11.0.5"
+  resolved "https://registry.yarnpkg.com/unified/-/unified-11.0.5.tgz#f66677610a5c0a9ee90cab2b8d4d66037026d9e1"
+  integrity sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==
+  dependencies:
+    "@types/unist" "^3.0.0"
+    bail "^2.0.0"
+    devlop "^1.0.0"
+    extend "^3.0.0"
+    is-plain-obj "^4.0.0"
+    trough "^2.0.0"
+    vfile "^6.0.0"
+
+unique-string@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-3.0.0.tgz#84a1c377aff5fd7a8bc6b55d8244b2bd90d75b9a"
+  integrity sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==
+  dependencies:
+    crypto-random-string "^4.0.0"
+
+unist-util-is@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-6.0.0.tgz#b775956486aff107a9ded971d996c173374be424"
+  integrity sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==
+  dependencies:
+    "@types/unist" "^3.0.0"
+
+unist-util-position-from-estree@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz#d94da4df596529d1faa3de506202f0c9a23f2200"
+  integrity sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==
+  dependencies:
+    "@types/unist" "^3.0.0"
+
+unist-util-position@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-5.0.0.tgz#678f20ab5ca1207a97d7ea8a388373c9cf896be4"
+  integrity sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==
+  dependencies:
+    "@types/unist" "^3.0.0"
+
+unist-util-stringify-position@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz#449c6e21a880e0855bf5aabadeb3a740314abac2"
+  integrity sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==
+  dependencies:
+    "@types/unist" "^3.0.0"
+
+unist-util-visit-parents@^6.0.0:
+  version "6.0.1"
+  resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz#4d5f85755c3b8f0dc69e21eca5d6d82d22162815"
+  integrity sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==
+  dependencies:
+    "@types/unist" "^3.0.0"
+    unist-util-is "^6.0.0"
+
+unist-util-visit@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-5.0.0.tgz#a7de1f31f72ffd3519ea71814cccf5fd6a9217d6"
+  integrity sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==
+  dependencies:
+    "@types/unist" "^3.0.0"
+    unist-util-is "^6.0.0"
+    unist-util-visit-parents "^6.0.0"
+
+universalify@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d"
+  integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==
+
+unpipe@1.0.0, unpipe@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
+  integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
+
+update-browserslist-db@^1.1.3:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz#348377dd245216f9e7060ff50b15a1b740b75420"
+  integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==
+  dependencies:
+    escalade "^3.2.0"
+    picocolors "^1.1.1"
+
+update-notifier@^6.0.2:
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-6.0.2.tgz#a6990253dfe6d5a02bd04fbb6a61543f55026b60"
+  integrity sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og==
+  dependencies:
+    boxen "^7.0.0"
+    chalk "^5.0.1"
+    configstore "^6.0.0"
+    has-yarn "^3.0.0"
+    import-lazy "^4.0.0"
+    is-ci "^3.0.1"
+    is-installed-globally "^0.4.0"
+    is-npm "^6.0.0"
+    is-yarn-global "^0.4.0"
+    latest-version "^7.0.0"
+    pupa "^3.1.0"
+    semver "^7.3.7"
+    semver-diff "^4.0.0"
+    xdg-basedir "^5.1.0"
+
+uri-js@^4.2.2:
+  version "4.4.1"
+  resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
+  integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
+  dependencies:
+    punycode "^2.1.0"
+
+url-loader@^4.1.1:
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-4.1.1.tgz#28505e905cae158cf07c92ca622d7f237e70a4e2"
+  integrity sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==
+  dependencies:
+    loader-utils "^2.0.0"
+    mime-types "^2.1.27"
+    schema-utils "^3.0.0"
+
+util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+  integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
+
+utila@~0.4:
+  version "0.4.0"
+  resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c"
+  integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==
+
+utility-types@^3.10.0:
+  version "3.11.0"
+  resolved "https://registry.yarnpkg.com/utility-types/-/utility-types-3.11.0.tgz#607c40edb4f258915e901ea7995607fdf319424c"
+  integrity sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==
+
+utils-merge@1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
+  integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==
+
+uuid@^11.1.0:
+  version "11.1.0"
+  resolved "https://registry.yarnpkg.com/uuid/-/uuid-11.1.0.tgz#9549028be1753bb934fc96e2bca09bb4105ae912"
+  integrity sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==
+
+uuid@^8.3.2:
+  version "8.3.2"
+  resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
+  integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
+
+v8-compile-cache-lib@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf"
+  integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==
+
+value-equal@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c"
+  integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==
+
+vary@~1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
+  integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==
+
+vfile-location@^5.0.0:
+  version "5.0.3"
+  resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-5.0.3.tgz#cb9eacd20f2b6426d19451e0eafa3d0a846225c3"
+  integrity sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==
+  dependencies:
+    "@types/unist" "^3.0.0"
+    vfile "^6.0.0"
+
+vfile-message@^4.0.0:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-4.0.2.tgz#c883c9f677c72c166362fd635f21fc165a7d1181"
+  integrity sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==
+  dependencies:
+    "@types/unist" "^3.0.0"
+    unist-util-stringify-position "^4.0.0"
+
+vfile@^6.0.0, vfile@^6.0.1:
+  version "6.0.3"
+  resolved "https://registry.yarnpkg.com/vfile/-/vfile-6.0.3.tgz#3652ab1c496531852bf55a6bac57af981ebc38ab"
+  integrity sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==
+  dependencies:
+    "@types/unist" "^3.0.0"
+    vfile-message "^4.0.0"
+
+vscode-jsonrpc@8.2.0:
+  version "8.2.0"
+  resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz#f43dfa35fb51e763d17cd94dcca0c9458f35abf9"
+  integrity sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==
+
+vscode-languageserver-protocol@3.17.5:
+  version "3.17.5"
+  resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz#864a8b8f390835572f4e13bd9f8313d0e3ac4bea"
+  integrity sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==
+  dependencies:
+    vscode-jsonrpc "8.2.0"
+    vscode-languageserver-types "3.17.5"
+
+vscode-languageserver-textdocument@~1.0.11:
+  version "1.0.12"
+  resolved "https://registry.yarnpkg.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz#457ee04271ab38998a093c68c2342f53f6e4a631"
+  integrity sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==
+
+vscode-languageserver-types@3.17.5:
+  version "3.17.5"
+  resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz#3273676f0cf2eab40b3f44d085acbb7f08a39d8a"
+  integrity sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==
+
+vscode-languageserver@~9.0.1:
+  version "9.0.1"
+  resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz#500aef82097eb94df90d008678b0b6b5f474015b"
+  integrity sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==
+  dependencies:
+    vscode-languageserver-protocol "3.17.5"
+
+vscode-uri@~3.0.8:
+  version "3.0.8"
+  resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-3.0.8.tgz#1770938d3e72588659a172d0fd4642780083ff9f"
+  integrity sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==
+
+watchpack@^2.4.1:
+  version "2.4.4"
+  resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.4.tgz#473bda72f0850453da6425081ea46fc0d7602947"
+  integrity sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==
+  dependencies:
+    glob-to-regexp "^0.4.1"
+    graceful-fs "^4.1.2"
+
+wbuf@^1.1.0, wbuf@^1.7.3:
+  version "1.7.3"
+  resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df"
+  integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==
+  dependencies:
+    minimalistic-assert "^1.0.0"
+
+web-namespaces@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-2.0.1.tgz#1010ff7c650eccb2592cebeeaf9a1b253fd40692"
+  integrity sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==
+
+webpack-bundle-analyzer@^4.10.2:
+  version "4.10.2"
+  resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz#633af2862c213730be3dbdf40456db171b60d5bd"
+  integrity sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==
+  dependencies:
+    "@discoveryjs/json-ext" "0.5.7"
+    acorn "^8.0.4"
+    acorn-walk "^8.0.0"
+    commander "^7.2.0"
+    debounce "^1.2.1"
+    escape-string-regexp "^4.0.0"
+    gzip-size "^6.0.0"
+    html-escaper "^2.0.2"
+    opener "^1.5.2"
+    picocolors "^1.0.0"
+    sirv "^2.0.3"
+    ws "^7.3.1"
+
+webpack-dev-middleware@^7.4.2:
+  version "7.4.2"
+  resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-7.4.2.tgz#40e265a3d3d26795585cff8207630d3a8ff05877"
+  integrity sha512-xOO8n6eggxnwYpy1NlzUKpvrjfJTvae5/D6WOK0S2LSo7vjmo5gCM1DbLUmFqrMTJP+W/0YZNctm7jasWvLuBA==
+  dependencies:
+    colorette "^2.0.10"
+    memfs "^4.6.0"
+    mime-types "^2.1.31"
+    on-finished "^2.4.1"
+    range-parser "^1.2.1"
+    schema-utils "^4.0.0"
+
+webpack-dev-server@>=5.2.1, webpack-dev-server@^4.15.2:
+  version "5.2.2"
+  resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-5.2.2.tgz#96a143d50c58fef0c79107e61df911728d7ceb39"
+  integrity sha512-QcQ72gh8a+7JO63TAx/6XZf/CWhgMzu5m0QirvPfGvptOusAxG12w2+aua1Jkjr7hzaWDnJ2n6JFeexMHI+Zjg==
+  dependencies:
+    "@types/bonjour" "^3.5.13"
+    "@types/connect-history-api-fallback" "^1.5.4"
+    "@types/express" "^4.17.21"
+    "@types/express-serve-static-core" "^4.17.21"
+    "@types/serve-index" "^1.9.4"
+    "@types/serve-static" "^1.15.5"
+    "@types/sockjs" "^0.3.36"
+    "@types/ws" "^8.5.10"
+    ansi-html-community "^0.0.8"
+    bonjour-service "^1.2.1"
+    chokidar "^3.6.0"
+    colorette "^2.0.10"
+    compression "^1.7.4"
+    connect-history-api-fallback "^2.0.0"
+    express "^4.21.2"
+    graceful-fs "^4.2.6"
+    http-proxy-middleware "^2.0.9"
+    ipaddr.js "^2.1.0"
+    launch-editor "^2.6.1"
+    open "^10.0.3"
+    p-retry "^6.2.0"
+    schema-utils "^4.2.0"
+    selfsigned "^2.4.1"
+    serve-index "^1.9.1"
+    sockjs "^0.3.24"
+    spdy "^4.0.2"
+    webpack-dev-middleware "^7.4.2"
+    ws "^8.18.0"
+
+webpack-merge@^5.9.0:
+  version "5.10.0"
+  resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.10.0.tgz#a3ad5d773241e9c682803abf628d4cd62b8a4177"
+  integrity sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==
+  dependencies:
+    clone-deep "^4.0.1"
+    flat "^5.0.2"
+    wildcard "^2.0.0"
+
+webpack-merge@^6.0.1:
+  version "6.0.1"
+  resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-6.0.1.tgz#50c776868e080574725abc5869bd6e4ef0a16c6a"
+  integrity sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==
+  dependencies:
+    clone-deep "^4.0.1"
+    flat "^5.0.2"
+    wildcard "^2.0.1"
+
+webpack-sources@^3.2.3:
+  version "3.3.3"
+  resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.3.3.tgz#d4bf7f9909675d7a070ff14d0ef2a4f3c982c723"
+  integrity sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==
+
+webpack@^5.88.1, webpack@^5.95.0:
+  version "5.99.9"
+  resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.99.9.tgz#d7de799ec17d0cce3c83b70744b4aedb537d8247"
+  integrity sha512-brOPwM3JnmOa+7kd3NsmOUOwbDAj8FT9xDsG3IW0MgbN9yZV7Oi/s/+MNQ/EcSMqw7qfoRyXPoeEWT8zLVdVGg==
+  dependencies:
+    "@types/eslint-scope" "^3.7.7"
+    "@types/estree" "^1.0.6"
+    "@types/json-schema" "^7.0.15"
+    "@webassemblyjs/ast" "^1.14.1"
+    "@webassemblyjs/wasm-edit" "^1.14.1"
+    "@webassemblyjs/wasm-parser" "^1.14.1"
+    acorn "^8.14.0"
+    browserslist "^4.24.0"
+    chrome-trace-event "^1.0.2"
+    enhanced-resolve "^5.17.1"
+    es-module-lexer "^1.2.1"
+    eslint-scope "5.1.1"
+    events "^3.2.0"
+    glob-to-regexp "^0.4.1"
+    graceful-fs "^4.2.11"
+    json-parse-even-better-errors "^2.3.1"
+    loader-runner "^4.2.0"
+    mime-types "^2.1.27"
+    neo-async "^2.6.2"
+    schema-utils "^4.3.2"
+    tapable "^2.1.1"
+    terser-webpack-plugin "^5.3.11"
+    watchpack "^2.4.1"
+    webpack-sources "^3.2.3"
+
+webpackbar@^6.0.1:
+  version "6.0.1"
+  resolved "https://registry.yarnpkg.com/webpackbar/-/webpackbar-6.0.1.tgz#5ef57d3bf7ced8b19025477bc7496ea9d502076b"
+  integrity sha512-TnErZpmuKdwWBdMoexjio3KKX6ZtoKHRVvLIU0A47R0VVBDtx3ZyOJDktgYixhoJokZTYTt1Z37OkO9pnGJa9Q==
+  dependencies:
+    ansi-escapes "^4.3.2"
+    chalk "^4.1.2"
+    consola "^3.2.3"
+    figures "^3.2.0"
+    markdown-table "^2.0.0"
+    pretty-time "^1.1.0"
+    std-env "^3.7.0"
+    wrap-ansi "^7.0.0"
+
+websocket-driver@>=0.5.1, websocket-driver@^0.7.4:
+  version "0.7.4"
+  resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760"
+  integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==
+  dependencies:
+    http-parser-js ">=0.5.1"
+    safe-buffer ">=5.1.0"
+    websocket-extensions ">=0.1.1"
+
+websocket-extensions@>=0.1.1:
+  version "0.1.4"
+  resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42"
+  integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==
+
+which@^2.0.1:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
+  integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
+  dependencies:
+    isexe "^2.0.0"
+
+widest-line@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-4.0.1.tgz#a0fc673aaba1ea6f0a0d35b3c2795c9a9cc2ebf2"
+  integrity sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==
+  dependencies:
+    string-width "^5.0.1"
+
+wildcard@^2.0.0, wildcard@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67"
+  integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==
+
+"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
+  integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
+  dependencies:
+    ansi-styles "^4.0.0"
+    string-width "^4.1.0"
+    strip-ansi "^6.0.0"
+
+wrap-ansi@^7.0.0:
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
+  integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
+  dependencies:
+    ansi-styles "^4.0.0"
+    string-width "^4.1.0"
+    strip-ansi "^6.0.0"
+
+wrap-ansi@^8.0.1, wrap-ansi@^8.1.0:
+  version "8.1.0"
+  resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"
+  integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==
+  dependencies:
+    ansi-styles "^6.1.0"
+    string-width "^5.0.1"
+    strip-ansi "^7.0.1"
+
+write-file-atomic@^3.0.3:
+  version "3.0.3"
+  resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8"
+  integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==
+  dependencies:
+    imurmurhash "^0.1.4"
+    is-typedarray "^1.0.0"
+    signal-exit "^3.0.2"
+    typedarray-to-buffer "^3.1.5"
+
+ws@^7.3.1:
+  version "7.5.10"
+  resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9"
+  integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==
+
+ws@^8.18.0:
+  version "8.18.2"
+  resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.2.tgz#42738b2be57ced85f46154320aabb51ab003705a"
+  integrity sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==
+
+xdg-basedir@^5.0.1, xdg-basedir@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-5.1.0.tgz#1efba19425e73be1bc6f2a6ceb52a3d2c884c0c9"
+  integrity sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==
+
+xml-js@^1.6.11:
+  version "1.6.11"
+  resolved "https://registry.yarnpkg.com/xml-js/-/xml-js-1.6.11.tgz#927d2f6947f7f1c19a316dd8eea3614e8b18f8e9"
+  integrity sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==
+  dependencies:
+    sax "^1.2.4"
+
+yallist@^3.0.2:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
+  integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
+
+yaml@^2.3.4:
+  version "2.8.0"
+  resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.8.0.tgz#15f8c9866211bdc2d3781a0890e44d4fa1a5fff6"
+  integrity sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==
+
+yn@3.1.1:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"
+  integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==
+
+yocto-queue@^1.0.0:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.2.1.tgz#36d7c4739f775b3cbc28e6136e21aa057adec418"
+  integrity sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==
+
+zwitch@^2.0.0:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7"
+  integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==
